jquery / ajax - 单击任何表单上的“提交”按钮3秒钟

时间:2015-05-29 15:14:17

标签: javascript php jquery ajax forms

我搜索过并搜索过,发现没有什么可以解释我的需要。

我有一个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元素的解决方案。

2 个答案:

答案 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秒。