web-dev-qa-db-fra.com

États de formulaire avec des conditions "et" et "ou"

En utilisant l'API de formulaire dans D7, je dois utiliser des états pour configurer une entrée visible avec cette condition:

field1 = value A AND (field2 = value B OR value C OR value D)

Quelque chose comme ça, mais cet exemple ne fonctionne pas:

'#states' => array(
      'visible' => array(
        array(':input[name="question_inhabitant_type"]' => array('value' => 'owner')),
        'AND',
        array(':input[name="question_building_type"]' => array('value' => 'house100')),
        'OR',
        array(':input[name="question_building_type"]' => array('value' => 'house150')),
        'OR',
        array(':input[name="question_building_type"]' => array('value' => 'house200')),
      ),
    ),

Une idée?

5
Promo

Vous pouvez utiliser or/xor dans les états du formulaire. Pour and, la continuation des conditions suffit. Par exemple votre code la condition peut s'écrire:

'#states' => array(
  'visible' => array(
    array(':input[name="question_inhabitant_type"]' => array('value' => 'owner')),
    array(
      array(':input[name="question_building_type"]' => array('value' => 'house100')),
      'or',
      array(':input[name="question_building_type"]' => array('value' => 'house150')),
      'or',
      array(':input[name="question_building_type"]' => array('value' => 'house200')),
    ),
  ),
),

Remarque: jQuery 1.7 ne prend pas en charge les OR/XOR pour #states. Donc, assurez-vous d'avoir la dernière version de jQuery sur votre site (> 1.7).

Malheureusement, le code ci-dessus n'a pas fonctionné comme prévu. Aidez-nous à corriger vos commentaires. En attendant, vous pouvez également essayer ce code:

'#states' => array(
  'visible' => array(
    ':input[name="question_inhabitant_type"]' => array('value' => 'owner'),
    ':input[name="question_building_type"]' => array(
      array('value' => 'house100'),
      array('value' => 'house150'),
      array('value' => 'house200'),
    ),
  ),
),
5
Vishal Kumar