Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery';。点击(回调)';阻止默认事件_Javascript_Jquery_Forms_Javascript Events_Event Propagation - Fatal编程技术网

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
参数如何)工作正常!谢谢迈克:)