Javascript jQuery';。点击(回调)';阻止默认事件
我试图阻止双击表单按钮,禁用该元素几秒钟Javascript jQuery';。点击(回调)';阻止默认事件,javascript,jquery,forms,javascript-events,event-propagation,Javascript,Jquery,Forms,Javascript Events,Event Propagation,我试图阻止双击表单按钮,禁用该元素几秒钟 <form action="#" method="POST"> <input type="text" /> <input type="password" /> <button class="myButton" type="submit">Send</button> </form> var that = this; this.element = $(".my
<form action="#" method="POST">
<input type="text" />
<input type="password" />
<button class="myButton" type="submit">Send</button>
</form>
var that = this;
this.element = $(".myButton");
this.element.click(function(e) {
this.element.prop("disabled", true);
window.setTimeout(function() {
that.element.prop("disabled", false);
}, 2000);
});
邮寄
var=这个;
this.element=$(“.myButton”);
此.element.click(函数(e){
this.element.prop(“已禁用”,true);
setTimeout(函数(){
即.element.prop(“禁用”,false);
}, 2000);
});
它成功地启用/禁用,但使用.click()
函数会阻止(自动)事件的传播,并且页面不会跟随表单操作属性中的链接
注意我正在尝试将该行为添加到一个表单按钮中,以前工作得很好(发布到aciton链接)。
此外,启用/禁用也可以完美地工作(不管我在上面代码的改编中可能会出现的最终错误)
PS-任何解决方案都必须是跨浏览器的,并且与IE8兼容。通过禁用该按钮,您可以阻止post操作的发生。因此,您要做的是禁用表单,然后使用javascript调用实际提交表单。可能是这样的:
$('.myButton').click(function() {
$button = $(this);
$button.attr('disabled', true);
$button.closest('form').submit();
setTimeout(function() {
$button.attr('disabled', false);
}, 2000);
});
通过禁用该按钮,可以阻止post操作的发生。因此,您要做的是禁用表单,然后使用javascript调用实际提交表单。可能是这样的:
$('.myButton').click(function() {
$button = $(this);
$button.attr('disabled', true);
$button.closest('form').submit();
setTimeout(function() {
$button.attr('disabled', false);
}, 2000);
});
另一个单击处理程序在哪里?没有被调用的那个。此示例显示了禁用/启用,但没有说明问题。
此
指的是setTimeout回调中的窗口,请使用该
编辑后,您当前使用的代码是什么???为什么你不发布相关的问题,而不是在每个评论/答案上用新代码编辑你的问题?@RocketHazmat Ya在FF IIRC上,修复方法可能是在超时时设置禁用,延迟为0,因为堆栈event@adeneo如果用户双击,它将足够快,可以在第二次重新触发帖子(这也是我想要避免的)。另一个单击处理程序在哪里?没有被调用的那个。此示例显示了禁用/启用,但没有说明问题。此
指的是setTimeout回调中的窗口,请使用该
编辑后,您当前使用的代码是什么???为什么你不发布相关的问题,而不是在每个评论/答案上用新代码编辑你的问题?@RocketHazmat Ya在FF IIRC上,修复方法可能是在超时时设置禁用,延迟为0,因为堆栈event@adeneo如果用户双击,它将足够快,可以在第二次重新触发帖子(这也是我想要避免的)。这会起作用,但如果他试图提交ajax表单,这不是最好的解决方案。最好是在发送之前禁用按钮单击或ajax中的按钮,并在onComplete中重新启用它。@PauloSegundo-如果他尝试使用ajax,他就不会有这个问题。这正是问题所在,正如火箭危险品所建议的那样。您的代码(不管beforeSend
/onComplete
参数如何)工作正常!谢谢Mike:)这会有用的,但是如果他试图提交ajax表单,这不是最好的解决方案。最好是在发送之前禁用按钮单击或ajax中的按钮,并在onComplete中重新启用它。@PauloSegundo-如果他尝试使用ajax,他就不会有这个问题。这正是问题所在,正如火箭危险品所建议的那样。您的代码(不管beforeSend
/onComplete
参数如何)工作正常!谢谢迈克:)