我真的被难住了。我有一个带有按钮的 ajax 表单 - 实际上,下面的表单既有一个按钮又有一个选择对象,两者都调用相同的回调函数。
我想要的是:调用回调的按钮,但不提交表单。
我所拥有的:选择调用回调就好了,但是提交按钮没有执行任何操作。
想法?
function my_module_pane_checkout_form($form, $form_state, $checkout_pane, $order) {
$pane_form = array();
$pane_form['codes'] = array(
'#prefix' => '<div id="codes-fieldset-wrapper">',
'#suffix' => '</div>',
);
$pane_form['codes']['add_code_0'] = array(
'#type' => 'radios',
'#options' => array(1 => 'One', 2 => 'Two'),
'#ajax' => array(
'callback' => 'my_module_pane_callback',
'wrapper' => 'codes-fieldset-wrapper',
),
'#default_value' => 1,
);
$pane_form['codes']['add_code'] = array(
'#type' => 'submit',
'#value' => 'Add Code',
'#ajax' => array(
'callback' => 'my_module_pane_callback',
'wrapper' => 'codes-fieldset-wrapper',
),
);
return $pane_form;
}
function my_module_pane_callback($form, $form_state) {
watchdog('php', 'inside callback');
return $form['my_module'];
}
最佳答案
我添加了 '#limit_validation_errors' => array()
并将 submit
更改为 button
并使其正常工作,但之后就不行了非常头疼(并且一整天的工作都白费了)。
此表单位于商业结帐 Pane 上。使用提交按钮,表单总是提交(在 ajax_form_callback 函数中,$form_state 对象始终提交=1),无论我是否在 # 中设置了 'prevent' => 'click' ajax 数组(因为 Drupal ajax 在鼠标按下时触发)或设置了 '#executes_submit_handler' => FALSE。因此,表单始终处于验证状态,并且由于并未填写所有内容,因此未通过。
使用该按钮,表单仍在运行验证(并且失败),但表单未标记为已提交。
因此,JSON 负载中没有该按钮的任何命令,因为它验证失败。由于 select(或任何其他对象)没有提交表单或检查验证,因此该元素的 ajax 调用正在工作。
由于我们需要通过两项检查才能构建表单和 ajax 命令数组,因此我们需要元素类型为按钮,并且需要将限制验证错误设置为空数组 - Drupal 只会对数组中传递的元素进行检查 - 为此我们不需要任何东西。
再次:将 '#type' => 'submit'
更改为 '#type' => 'button'
并添加 '#limit_validation_errors' = > 数组()
.
function my_module_pane_checkout_form($form, $form_state, $checkout_pane, $order) {
$pane_form = array();
$pane_form['codes'] = array(
'#prefix' => '<div id="codes-fieldset-wrapper">',
'#suffix' => '</div>',
);
$pane_form['codes']['add_code_0'] = array(
'#type' => 'radios',
'#options' => array(1 => 'One', 2 => 'Two'),
'#ajax' => array(
'callback' => 'my_module_pane_callback',
'wrapper' => 'codes-fieldset-wrapper',
),
'#default_value' => 1,
);
$pane_form['codes']['add_code'] = array(
'#type' => 'button',
'#value' => 'Add Code',
'#limit_validation_errors' => array(),
'#ajax' => array(
'callback' => 'my_module_pane_callback',
'wrapper' => 'codes-fieldset-wrapper',
),
);
return $pane_form;
}
function my_module_pane_callback($form, $form_state) {
watchdog('php', 'inside callback');
return $form['my_module'];
}
关于ajax - Drupal 7 表单 API : Ajax button not firing callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36186163/