Jquery 单击Drupal表单提交按钮以防止重复提交时,如何禁用该按钮?
听起来是个简单的问题。我添加了一点jQuery的魔力:Jquery 单击Drupal表单提交按钮以防止重复提交时,如何禁用该按钮?,jquery,drupal,drupal-fapi,Jquery,Drupal,Drupal Fapi,听起来是个简单的问题。我添加了一点jQuery的魔力: $("#edit-save").click(function(event) { $(this).attr("disabled", "true"); }); 然而,一旦这一点到位,我的表单提交处理程序就不会被调用 这是一个自定义表单,路径定义在hook_菜单中: $items['my_form'] = array( 'title' => 'My form', 'page callback' => 'drupal_ge
$("#edit-save").click(function(event) {
$(this).attr("disabled", "true");
});
然而,一旦这一点到位,我的表单提交处理程序就不会被调用
这是一个自定义表单,路径定义在hook_菜单中:
$items['my_form'] = array(
'title' => 'My form',
'page callback' => 'drupal_get_form',
'page arguments' => array('mymod_myform'),
'type' => MENU_CALLBACK,
);
在表单中,我有一个提交按钮和一个取消按钮:
$form['cancel'] = array(
'#type' => 'submit',
'#value' => t('Cancel'),
);
$form['save'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
我定义了自己的提交处理程序:
$form['#submit'][] = 'mymod_myform_submit';
我在drupal\u get\u form()函数中添加了一些跟踪代码,以便在提交表单时嗅探$\u POST变量。禁用jQuery magic时,$\u POST变量包含一个“op”参数:
Array
(
[op] = Save
[form_build_id] => form-6e74c87390e3fc48d0bebd2f5193315b
[form_token] => 33db6e34c0350e33c48861a63a38d45f
[form_id] => dh_seo_workload_item_form
)
但是如果我启用jQuery magic在单击submit按钮后禁用它,“op”参数将不再包含在$u POST数组中,因此Drupal认为表单尚未提交
我已经在上看到了这个问题,但我担心这似乎是一个非常棘手的问题,应该有更好的方法。我认为绑定到按钮的单击事件这一事实意味着在单击事件冒泡到表单并导致提交之前,按钮被禁用
我们的团队发现,禁用submit按钮几乎总是会给Internet Explorer带来问题。我们制作了一个小插件来解决这个问题;请参见此处的代码:我今天下午通过这种方式修复了它,并且能够在没有问题的情况下获得提交的表单信息:
$("#id_of_button").click(function() {
var submit = $(this);
setTimeout(function(){
submit.attr('disabled','disabled')
},1);
});
或者您可以这样做,作为PHP表单数组级别的一行程序添加
$form['submit']=数组(
“#键入”=>“提交”,
“#value”=>t('Save'),
“#属性”=>数组(
'onclick'=>'javascript:var s=this;setTimeout(function(){s.value=“Saving…”;s.disabled=true;},1);',
),
);
只需隐藏提交按钮(显示:无),并显示另一个已禁用的按钮即可。我认为这比解决这个问题的其他方法要简单。我通常在我的页面上只有两个按钮,一个可见,另一个不可见,单击,只需将它们切换
问题的原因是禁用的按钮不会触发回发。我还为您链接的问题添加了一个答案(我认为)一个不太老套的解决方案。可能不会调用is,因为在单击时禁用了按钮。下面我的解决方案使用设置超时为1ms来解决这个问题。感谢您的解决方案。我建议使用bind而不是live,因为live已被弃用。@罗杰-实际上,on()
是更新版本<代码>绑定
也不推荐使用,与上的live
或不同,它只在调用时对页面上的元素起作用。据此更正。哦,我明白了。谢谢你,内森!