2015-05-29 77 views
1

我搜索和搜索,没有找到任何解释我需要什么。jquery/ajax - 禁用任何形式的提交按钮3秒后点击

我有一个webscript,有几十个表格到处都是。我需要在任何表单上单击提交后禁用提交按钮3秒,无论表单的id,类或操作如何。

我发现下面的代码:

$('#btn').click(function(){ 
    var btn = $(this); 
    $.post('http://someurl.com',{delay: 3}).complete(function(){ 
btn.prop('disabled', false); 
    }); 
btn.prop('disabled', true); 

}); 

但这需要有形式BTN的ID,它似乎需要的形式被“贴”到了一些网页。

有没有一种方法可以在所有形式上实现这一点,不管正在执行的动作是什么?因此,如果它是一个注册表单,它会禁用“加入”按钮3秒钟,如果它的评论表单在提交评论后同样禁用3秒提交,......基本上不管我想要的表单或动作是什么点击后禁用提交按钮3秒钟。

这甚至可能吗?

我已经尝试将“#btn”的所有实例更改为“输入”,但这似乎不起作用。我对这件事情并不是很高兴,但似乎在别人的帮助下让事情陷于磕磕绊绊。

我的问题不是其他问题的重复是因为我特别声明“不管表单的id,类或行为如何”。在另一个问题上提出的解决方案没有具体解决这个问题。添加身份证,班级或类似物,因为各种原因(其社交网络脚本),数百和数百个表单上的web脚本不是一种遥远的可能性。我标记为正确的解决方案是不需要将任何属性添加到html元素的解决方案。 。

+1

重复这篇文章:http://stackoverflow.com/questions/10932766/disable-the-submit-button-after-clicking-and-enable-it-back-again-after-a-few-se – Sherlock

+0

我解释了为什么它不是现在重复:) – Bruce

回答

5

试试这个(伪代码,根据需要修改):

$('#mybutton').on('click', function() { 
    $('[type="submit"]').prop('disabled', true); 
    setTimeout(function() { 
     $('[type="submit"]').prop('disabled', false); 
    }, 3000); // 3 seconds 
}); 
+0

完美的工作谢谢你。 :) – Bruce

+0

@布鲁斯,很高兴知道它有帮助,欢呼! –

+1

只是想提一下,这是为了防止我的表单上的任何提交函数,直到禁用该按钮时添加'1ms'的setTimeout'。 – joshkrz

1

为什么不直接绑定一个单独的事件添加禁用了延迟?您仍然可以保留自己的点击逻辑。只需将下面的代码分配给一个容器元素,甚至是body,然后给你想要影响一个类.mybutton(或其他)的所有按钮。

$('.container').on('click', '.mybutton', function(event) { 
    setTimeout(function(){ 
    $(this).attr("disabled", false); 
    }, 3000); 
    $(this).attr("disabled", true); 
}); 

如果你想禁用取决于每个呼叫的“完整的”事件触发,你必须创建一个带参数的函数原型,可以分配给每个按钮。以上是3秒的延迟。