Условная логика API Drupal 7 Forms не работает в IE
У меня есть форма 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),
2 ответа
Хорошо, я нашел решение. Надеюсь, это поможет кому-то в ситуации, аналогичной моей.
':input[name="account_type"]' => array('value' => 1),
нужно было:
':input[name="account_type"]' => array('value' => "1"),
Очевидно, javascript в IE оценивал буквальный тип / значение, а не просто значение: 1 !== "1"
и т.д. Как только я исправил это, он начал работать как чемпион.
Также в моем коде был еще один экземпляр, в котором значение было получено из переменной PHP. Она не принимала переменную как int, но принимала ее как строку...
':input[name="account_type"]' => array('value' => "$id"),
Я предполагаю, что селектор ввода jQuery не работает по любой причине. Можете ли вы попробовать заменить :input[name="account_type"]
с #edit-account-type