I have a drupal 7 form with a bunch of fields:
$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),
),
),
);
In Firefox/Chrome/Opera all versions this form behaves as it should. However in all versions of IE the form initializes with display:none; style on all of the conditional fields regardless of what the value in account_type is. Changing the selected option of account_type does not effect the hidden status.
Any tips on debugging this form would be awesome.
Notes:
I've also tried:
':select[name="account_type"]' => array('value' => 1),
'#edit-account-type' => array('value' => 1),
Ok, I found the solution. Hopefully this will help someone in a similar situation to mine.
':input[name="account_type"]' => array('value' => 1),
needed to be:
':input[name="account_type"]' => array('value' => "1"),
Apparently, the javascript in IE was evaluating literal type/value not just value: 1 !== "1"
etc. Once I fixed this it started working like a champ.
also there was another instance in my code where the value was coming from a PHP variable, It wouldn't accept the variable as an int, but accepted it as a string...
':input[name="account_type"]' => array('value' => "$id"),
My guess is that the jQuery input selector is failing for whatever reason. Can you try replacing :input[name="account_type"]
with #edit-account-type