2

私はたくさんのフィールドを持つ drupal 7 フォームを持っています:

$form['account_type'] = array(
  '#title' => t('Utility Account Type'),
  '#type' => 'select',
  '#options' => necp_enrollment_administration_portal_account_type_options(),
  '#required' => TRUE,
  '#default_value' => isset($form_state['values']['account_type']) ? $form_state['values']['account_type'] : '',
);

// Should show if account_type = 1
$form['home_wrapper'] = array(
  '#type' => 'fieldset',
  '#states' => array(
    'visible' => array(
      ':input[name="account_type"]' => array('value' => 1),
    ),
  ),
);
$form['home_wrapper']['first_name_1'] = array(
  '#title' => t('Primary Account First Name'),
  '#type' => 'textfield',
  '#default_value' => isset($form_state['values']['first_name_1']) ? $form_state['values']['first_name_1'] : '',
  '#states' => array(
    'required' => array(
      ':input[name="account_type"]' => array('value' => 1),
    ),
  ),
);
$form['home_wrapper']['last_name_1'] = array(
  '#title' => t('Primary Account Last Name'),
  '#type' => 'textfield',
  '#default_value' => isset($form_state['values']['last_name_1']) ? $form_state['values']['last_name_1'] : '',
  '#states' => array(
    'required' => array(
      ':input[name="account_type"]' => array('value' => 1),
    ),
  ),
);

// Should show if account_type = 2
$form['business_wrapper'] = array(
  '#type' => 'fieldset',
  '#states' => array(
    'visible' => array(
      ':input[name="account_type"]' => array('value' => 2),
    ),
  ),
);
$form['business_wrapper']['company_name'] = array(
  '#title' => t('Company/Organization'),
  '#type' => 'textfield',
  '#default_value' => isset($form_state['values']['company_name']) ? $form_state['values']['company_name'] : '',
  '#states' => array(
    'required' => array(
      ':input[name="account_type"]' => array('value' => 2),
    ),
  ),
);

Firefox/Chrome/Opera のすべてのバージョンで、このフォームは正常に動作します。ただし、IE のすべてのバージョンで、フォームは display:none; で初期化されます。account_type の値に関係なく、すべての条件付きフィールドのスタイル。account_type の選択されたオプションを変更しても、非表示のステータスには影響しません。

このフォームのデバッグに関するヒントは素晴らしいでしょう。

ノート:

  • 私は Drupal 開発者ではありませんが、このサイトを継承しました。最後のいくつかのバグを解決して、ライブに移行できるようにしています
  • 上記以外にもフィールドがあります。フォームのセットアップ方法の要点を理解できるように、該当するフィールドをいくつか示しました。
  • 開発中のフォームの現在の URL: https://northeastcleanpower.com/enroll_new
  • http://www.browserstack.com/を使用してIE 7 ~ 10pp4 をデバッグしています (ただし、8 以上のみをサポートする必要があると思います)。

私も試しました:

  • ':select[name="account_type"]' => array('value' => 1),
  • '#edit-account-type' => array('value' => 1),
4

2 に答える 2

12

わかりました、私は解決策を見つけました。うまくいけば、これは私と同じような状況にある誰かを助けるでしょう.

':input[name="account_type"]' => array('value' => 1),

する必要があります:

':input[name="account_type"]' => array('value' => "1"),

どうやら、IE の JavaScript は値だけでなくリテラル型/値を評価1 !== "1"していたようです。これを修正すると、チャンピオンのように動作し始めました。

また、私のコードには、値が PHP 変数から来ている別のインスタンスがありました。変数を int として受け入れず、文字列として受け入れました...

':input[name="account_type"]' => array('value' => "$id"),
于 2012-03-21T17:26:28.830 に答える
0

私の推測では、jQuery入力セレクターは何らかの理由で失敗しています。に置き換え:input[name="account_type"]てみてください#edit-account-type

于 2012-03-20T21:45:03.840 に答える