我搜索过并搜索过,发现没有什么可以解释我的需要。
我有一个webcript,遍布整个地方有几十种形式。无论表单的id,类或操作是什么,我都需要在任何表单上单击提交后禁用提交按钮3秒钟。
我找到了以下代码:
$('#btn').click(function(){
var btn = $(this);
$.post('http://someurl.com',{delay: 3}).complete(function(){
btn.prop('disabled', false);
});
btn.prop('disabled', true);
});
但是这要求表单的id为btn,并且它似乎要求表单为" post"到一些页面。
有没有办法在所有形式上实现这一点,无论正在执行的操作如何?因此,如果它是一个注册表单,它会禁用" join"按钮3秒,如果是一个评论表单,它在提交评论后同样禁用提交3秒,....基本上无论表格或动作是什么,我想在点击后禁用提交按钮3秒。
这甚至可能吗?
我尝试更改"#btn"的所有实例到"输入"但这似乎不起作用。我真的不擅长这些东西,但似乎在其他人的帮助下管理绊脚石。
我的问题与其他问题不重复的原因是因为我特别说明了#34;无论表格的内容,类别或行为是什么,#34;。在另一个问题上提出的解决方案没有具体解决这个问题。由于各种原因(其社交网络脚本),添加id,类或类似内容并不是具有数百种表单的webscript的远程可能性。我标记为正确的解决方案是不需要将任何属性添加到html元素的解决方案。
答案 0 :(得分:5)
试试这个。(伪代码,根据需要修改):
$('#mybutton').on('click', function() {
$('[type="submit"]').prop('disabled', true);
setTimeout(function() {
$('[type="submit"]').prop('disabled', false);
}, 3000); // 3 seconds
});
答案 1 :(得分:2)
为什么不绑定一个单独的事件来添加具有延迟的禁用?您仍然可以保留自己的点击逻辑进行发布。只需将下面的代码分配给容器元素,甚至是正文,并给出你想要影响类.mybutton(或其他东西)的所有按钮。
$('.container').on('click', '.mybutton', function(event) {
setTimeout(function(){
$(this).attr("disabled", false);
}, 3000);
$(this).attr("disabled", true);
});
如果希望禁用者根据每次调用的“完整”事件进行切换,则必须创建带参数的原型函数,该函数可以分配给每个按钮。以上是延迟3秒。