Ajax Drupal表单APi复选框状态

Ajax Drupal表单APi复选框状态,ajax,forms,api,drupal,checkbox,Ajax,Forms,Api,Drupal,Checkbox,因此,我在表单中创建了我的复选框 $form['existing_customer'] = array( '#type' => 'checkbox', '#title' => t('Are you an existing customer'), '#ajax' => array( 'callback' => 'checkbox_selected', 'wrapper' => 'subject', ),); 这将调用my函数并

因此,我在表单中创建了我的复选框

$form['existing_customer'] = array(
    '#type' => 'checkbox',
    '#title' => t('Are you an existing customer'),
    '#ajax' => array(
    'callback' => 'checkbox_selected',
    'wrapper' => 'subject',
),);
这将调用my函数并更改my复选框中的值

问题是,如果未选中,我无法让它切换回去

function checkbox_selected(&$form, &$form_state) {
    if ($form_state['values']['existing_customer'] == 1) {

        $my_options = array( 'select' => t('Select'), 'mr' => t('Mr'), 'mrs' => t('Mrs'), 'miss' => t('Miss'), 'ms' =>t('Ms'), 'sir' =>t('Sir'), 'dr' => t('Dr'), 'prof' => t('Prof') );

    }
    elseif ($form_state['values']['existing_customer'] == 0){
        $my_options = array( 'seconfZ' => t('jimmy'), 'mr' => t('Mr'), );

    }
    $form['subject'] = array(
        '#type' => 'select',
        '#title' => t('Subject'),
        '#options' => $my_options//$form['subject_options']['#value']
    );
    return $form['subject'];
}

我想我可以切换复选框的值或状态,但没有快乐

通常,当您使用表单API
#ajax
系统时,在元素包装器上再次调用
drupal_html_id()
之后,您指定的
包装器实际上会被另一个元素替换。因此,在AJAX发生后,我会检查Firebug/Web Inspector中“subject”元素的标记——我打赌包装器div现在类似于“subject--1”

要解决这个问题,您需要在要替换的项上手动设置一个包装器div——这个包装器div在重建表单时不会更改。例如,在表单生成器中:

$form['existing_customer'] = array(
  '#type' => 'checkbox',
  '#title' => t('Are you an existing customer'),
  '#ajax' => array(
    'callback' => 'checkbox_selected',
    'wrapper' => 'subject-wrapper',
  ),
);
$form['subject'] = array(
  '#prefix' => '<div id="subject-wrapper">',
  ...
  `#suffix' => '</div>',
);
$form['existing_customer']=数组(
“#键入”=>“复选框”,
“#title”=>t(“您是现有客户吗”),
“#ajax”=>数组(
“回调”=>“选中复选框”,
“包装器”=>“主题包装器”,
),
);
$form['subject']=数组(
“#前缀”=>”,
...
`#后缀“=>”,
);

希望有帮助

通常,当您使用表单API
#ajax
系统时,在元素包装器上再次调用
drupal_html_id()
之后,您指定的
包装器实际上会被另一个元素替换。因此,在AJAX发生后,我会检查Firebug/Web Inspector中“subject”元素的标记——我打赌包装器div现在类似于“subject--1”

要解决这个问题,您需要在要替换的项上手动设置一个包装器div——这个包装器div在重建表单时不会更改。例如,在表单生成器中:

$form['existing_customer'] = array(
  '#type' => 'checkbox',
  '#title' => t('Are you an existing customer'),
  '#ajax' => array(
    'callback' => 'checkbox_selected',
    'wrapper' => 'subject-wrapper',
  ),
);
$form['subject'] = array(
  '#prefix' => '<div id="subject-wrapper">',
  ...
  `#suffix' => '</div>',
);
$form['existing_customer']=数组(
“#键入”=>“复选框”,
“#title”=>t(“您是现有客户吗”),
“#ajax”=>数组(
“回调”=>“选中复选框”,
“包装器”=>“主题包装器”,
),
);
$form['subject']=数组(
“#前缀”=>”,
...
`#后缀“=>”,
);

希望有帮助

你的回拨电话真的被呼叫了吗?我不认为“回调”是API表单中的一个属性,但我确实看到它被调用了一个“#value_callback”,你说的“#value_callback”是什么意思?你使用的是什么版本?我通常使用它作为引用,而这正是我没有看到它的地方,因此我不确定您的方法是否被调用,如果被调用,它应该返回什么。你的回拨电话真的被呼叫了吗?我不认为“回调”是API表单中的一个属性,但我确实看到它被调用了一个“#value_callback”,你说的“#value_callback”是什么意思?你使用的是什么版本?我通常使用它作为引用,而这正是我没有看到它的地方,因此我不确定您的方法是否被调用,如果被调用,它应该返回什么。我记得那个问题。我想我用了一个非常粗糙的补丁来解决这个问题,但这似乎是一个非常可能的解决方案。我会把它作为参考,我很快就会做一些表格。我记得那个问题。我想我用了一个非常粗糙的补丁来解决这个问题,但这似乎是一个非常可能的解决方案。我很快就会做一些表格,我会把它作为参考书签。