ajax - Drupal 7 表单 API : Ajax button not firing callback

标签 ajax forms drupal drupal-7 ajaxform

我真的被难住了。我有一个带有按钮的 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/

相关文章:

javascript - 计算 jQuery Datatables 值的数量

php - 单击单选按钮检索 mySQL 数据

php - jQuery 验证 submitHandler 不适用于 WP AJAX/wp_localize_script

javascript - 每次加载页面时加载不同的 js 文件

javascript - 使用 javascript 提交表单并将结果返回到同一页面

javascript - HTML 中的 DOS 风格输入

forms - 为什么 primefaces menuitem 需要一个表单?

php - mysql drupal 6 查询问题

php - 为什么一些著名的程序总是使用打印

wordpress - 同一站点上的 Drupal 和 wordpress