Jquery /ajax -禁用提交按钮在任何表单上的3秒后点击


jquery/ajax - disable submit button on any form for 3 seconds upon click

我找了又找,找不到任何解释我需要的东西。

我有一个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);
});

,但这要求表单的id为BTN,它似乎要求表单"发布"到某些页面。

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

这可能吗?

我已经尝试将"#btn"的所有实例更改为"input",但这似乎不起作用。我真的不是很擅长这些事情,但似乎在别人的帮助下,我能处理好这些事情。

我的问题不重复其他问题的原因是因为我特别说明了"无论表单的id、类或动作是什么"。就另一个问题提出的解决办法并没有具体解决这个问题。添加id,类,或喜欢不是一个遥远的可能性,在一个webscript与数以百计的形式出于各种原因(这是一个社交网络脚本)。我标记为正确的解决方案是不需要向html元素添加任何属性的解决方案。

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

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

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

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

如果你想让disabled根据每次调用的'complete'事件进行切换,你必须创建一个带有参数的原型函数,可以将其分配给每个按钮。以上是3秒延迟