单击时禁用提交按钮将阻止在Google Chrome上提交表单

joh*_* Gu 22 javascript css jquery html5 asp.net-mvc-4

我在我的asp.net mvc里面的布局视图中添加了以下脚本: -

$(document).ready(function () {
    $('.btn.btn-primary').click(function () {
        $(this).prop("disabled", true);
        if (!$('form').valid()) {
            $(this).prop("disabled", false);
            return false;
        }
    });
    $('form').change(function () {
        $('.btn.btn-primary').prop("disabled", false);
    });
Run Code Online (Sandbox Code Playgroud)

我的脚本的目的是禁用提交按钮,如果模型无效或用户更改表单值,则重新启用它们.上述脚本在IE和Firefox上运行良好,但在Chrome上我无法提交表单,因为当用户点击提交按钮时,该按钮将被禁用,但表单将不会被提交.知道如何在Chrome上解决这个问题吗?

Yur*_*ter 31

而是在按钮的单击事件中禁用按钮 - 在表单的提交事件中禁用它(您也可以在那里检查表单的有效性).

这样它将在所有浏览器中普遍使用.

<form action="http://www.microsoft.com">
  <input class="btn-primary" type="submit" value="submit"/>
</form>


$('form').submit(function() {
  $('input.btn-primary').prop("disabled", "disabled");
})
Run Code Online (Sandbox Code Playgroud)

  • 前提是正确的,但正如您所看到的,它并不适用于所有浏览器.这是一个替代的小演示:http://jsfiddle.net/atd7X/ (3认同)

kwo*_*xer 6

我只是遇到了同样的问题,当按钮通过jQuery禁用时,谷歌浏览器没有触发我的提交事件。

背景信息:我有一个带有按钮的表单,只要点击该按钮就会被禁用。所以PHP提交代码不会被多次调用。该提交在 Drupal 后端运行,在我的情况下作为自定义submit_hook。但肯定可以在任何其他 CMS 中工作。但这不是问题。真正的问题是 Javascript 代码禁用了按钮,谷歌浏览器认为该按钮完全无效,而不仅仅是禁用。所以它不再触发任何代码。

但是这个问题很容易解决。

所以这段代码适用于Firefox / IE

(function($) {
Drupal.behaviors.somebehaviour = {
    attach: function(context, settings) {
        $('#edit-submit').click(function (e) {
            $('#edit-submit').val('Is saved...');
            $('#edit-submit').prop('disabled', 'disabled');
        });
    }
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

并让它在Chrome 上运行,您需要添加以下行:

$(this).parents('form').submit();
Run Code Online (Sandbox Code Playgroud)

所以对于这个例子,它最终会是:

(function($) {
Drupal.behaviors.somebehaviour = {
    attach: function(context, settings) {
        $('#edit-submit').click(function (e) {
            $('#edit-submit').val('Is saved...');
            $('#edit-submit').prop('disabled', 'disabled');
            $(this).parents('form').submit();
        });
    }
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案,它允许我在通用事件处理程序中处理这个问题,而不是将它放入表单提交中 (2认同)