单击以防止重复提交时,如何禁用Drupal表单提交按钮?

Mar*_*k B 6 jquery drupal drupal-fapi

听起来像一个简单的问题。我添加了一些jQuery魔术:

$("#edit-save").click(function(event) {
  $(this).attr("disabled", "true");
});
Run Code Online (Sandbox Code Playgroud)

但是,一旦到位,就不会调用我的表单提交处理程序。

这是我在hook_menu中定义的路径上的自定义表单:

$items['my_form'] = array(
  'title' => 'My form',
  'page callback' => 'drupal_get_form',
  'page arguments' => array('mymod_myform'),
  'type' => MENU_CALLBACK,
);
Run Code Online (Sandbox Code Playgroud)

在表单中,我有一个提交按钮和一个取消按钮:

$form['cancel'] = array(
  '#type' => 'submit',
  '#value' => t('Cancel'),
);

$form['save'] = array(
  '#type' => 'submit',
  '#value' => t('Save'),
);
Run Code Online (Sandbox Code Playgroud)

我定义了自己的提交处理程序:

$form['#submit'][] = 'mymod_myform_submit';
Run Code Online (Sandbox Code Playgroud)

我在drupal_get_form()函数中放置了一些跟踪代码,以在提交表单时嗅探$ _POST变量。禁用jQuery magic时,$ _POST变量包含一个“ op”参数:

Array
  (
    [op] = Save
    [form_build_id] => form-6e74c87390e3fc48d0bebd2f5193315b
    [form_token] => 33db6e34c0350e33c48861a63a38d45f
    [form_id] => dh_seo_workload_item_form
  )
Run Code Online (Sandbox Code Playgroud)

但是,如果我启用了jQuery Magic,可以在单击后禁用提交按钮,则$ _POST数组中将不再包含“ op”参数,因此Drupal认为该表单尚未提交。

我已经在jQuery避免了表单的双重提交问题,但是我担心这似乎是一个非常棘手的修复程序,应该有更好的方法。

Nat*_*ong 1

我认为您绑定到按钮的单击事件的事实意味着按钮在单击事件可以冒泡到表单并导致提交之前被禁用。

我们的团队发现禁用提交按钮几乎总是会给 Internet Explorer 带来问题。我们制作了一个小插件来解决这个问题;请参阅此处的代码:https ://stackoverflow.com/a/4473801/4376