禁用表单提交上的提交按钮

IT技术 javascript jquery
2021-01-13 17:38:55

我编写了此代码以在单击后禁用我网站上的提交按钮:

$('input[type=submit]').click(function(){
    $(this).attr('disabled', 'disabled');
});

不幸的是,它不会发送表格。我怎样才能解决这个问题?

编辑 我想绑定提交,而不是表单:)

6个回答

这样做onSubmit()

$('form#id').submit(function(){
    $(this).find(':input[type=submit]').prop('disabled', true);
});

发生的事情是您在实际触发提交事件之前完全禁用按钮。

您可能还应该考虑使用 ID 或 CLASSes 命名您的元素,这样您就不会选择页面上所有提交类型的输入。

演示: http : //jsfiddle.net/userdude/2hgnZ/

(请注意,我使用preventDefault()andreturn false因此该示例中的表单并未实际提交;在您使用时不要使用它。)

在我的情况下,我需要将其包装在 $(document).ready 中以使其工作。大概是显而易见的。不明显并且需要花费一些时间才能弄清楚的是,如果接收 POST(或 GET)的程序正在寻找提交按钮的值,如果它被禁用,那么它将不会被包含在POST 值。至少这是我的测试所显示的。
2021-03-23 17:38:55
是的,实际上我真的很想在页面中绑定所有提交。所以我不介意以这种方式处理 ID 或 CLASS :) 尝试过$('input[type=submit]').submit(function():表单已发送,但按钮不再禁用...
2021-03-25 17:38:55
是的,它有效!唯一的问题是我在表单上有一个 onSubmit 函数,所以它被 jquery 阴影绑定了!我需要在我原来的函数上实现这个,或者改变整个调用!谢谢
2021-04-01 17:38:55
您需要将 放在submit()表单上,而不是输入上。请参阅演示。
2021-04-08 17:38:55
我发现奇怪的是我无法在提交时绑定单击事件,然后在表单提交上再次绑定:)
2021-04-09 17:38:55

特别是如果有人在以下方面面临问题Chrome

您需要做的就是使用元素中onSubmit标签<form>来设置提交按钮disabled这将允许 Chrome 在按下按钮后立即禁用该按钮,并且表单提交仍将继续......

<form name ="myform" method="POST" action="dosomething.php" onSubmit="document.getElementById('submit').disabled=true;"> 
     <input type="submit" name="submit" value="Submit" id="submit"> 
</form>
在带有 JQuery 验证的表单上对此进行了测试,如果验证失败,则阻止提交,并最终导致提交按钮仍被此答案禁用。
2021-03-16 17:38:55
这正是我正在寻找的。一个简单的内联,不需要外部库,即使 JavaScript 被禁用也不会妨碍。
2021-03-24 17:38:55
这不是大多数开发人员想要的。Javascript 内容不应内联在 HTML 代码中。可能使用.on('submit', function() {..})(或.submit(function() {..})) 会更好。即使在这种情况下,您可能会.submit()在回调内部重新触发表单时遇到问题,陷入无限循环(至少在我使用的最新版本的 Opera 上,应该使用与 Chrome 相同的引擎)。
2021-04-08 17:38:55

禁用的控件不提交它们的值,这无助于了解用户是否单击了保存或删除。

所以我将按钮值存储在一个隐藏中,它确实被提交了。隐藏的名称与按钮名称相同。我将所有按钮都称为button.

例如 <button type="submit" name="button" value="save">Save</button>

基于此,我找到了here只需将单击的按钮存储在变量中。

$(document).ready(function(){
    var submitButton$;

    $(document).on('click', ":submit", function (e)
    {
        // you may choose to remove disabled from all buttons first here.
        submitButton$ = $(this);
    });

    $(document).on('submit', "form", function(e)
    {
        var form$ = $(this);
        var hiddenButton$ = $('#button', form$);
        if (IsNull(hiddenButton$))
        {
            // add the hidden to the form as needed
            hiddenButton$ = $('<input>')
                .attr({ type: 'hidden', id: 'button', name: 'button' })
                .appendTo(form$);
        }
        hiddenButton$.attr('value', submitButton$.attr('value'));
        submitButton$.attr("disabled", "disabled");
    }
});

这是我的IsNull功能。使用或替换您自己的 IsNull 或 undefined 版本等。

function IsNull(obj)
{
    var is;
    if (obj instanceof jQuery)
        is = obj.length <= 0;
    else
        is = obj === null || typeof obj === 'undefined' || obj == "";

    return is;
}

这应该在您的应用程序中处理它。

$(":submit").closest("form").submit(function(){
    $(':submit').attr('disabled', 'disabled');
});
应该.prop("disabled", true)改用。
2021-04-07 17:38:55

简单有效的解决办法是

<form ... onsubmit="myButton.disabled = true; return true;">
    ...
    <input type="submit" name="myButton" value="Submit">
</form>

来源:这里