Javascript返回false;没有取消另一个表单提交.submit jQuery call

时间:2016-07-06 23:15:19

标签: javascript jquery html forms

我在每个页面上都注入了这个jQuery函数,以便在单击它们后禁用提交按钮。

$('form').submit(function () {
        var btn = $('input[type=submit]', this);
        disableButtonOrLink.disableSubmit(btn);

        btn = $('button[type=submit]', this);
        disableButtonOrLink.disableSubmit(btn);
    });

问题是我还有一些后端验证,有时会以这样的形式附加到表单

 <form action="someAction" method="post" name="someForm" class="form" 
    onsubmit="var invalid=false; 
    invalid=someAction(); 
    if(invalid){return false;}"
    id="someForm">  

我遇到的问题是在返回false之后始终调用('form')。submit动作。由于返回错误,表单实际上并未提交;但是这个jQuery函数仍然被调用。反正有没有阻止这个.submit被调用?

只是为了澄清究竟发生了什么: 正在调用表单上的onSubmit;

正在点击返回虚假部分并正确取消提交;

在onSubmit完成后仍然会调用('form')。submit,好像表单的提交没有被取消并且正在禁用按钮。

我想阻止最后一步发生。

2 个答案:

答案 0 :(得分:0)

您可以使用JQuery在form中找到这些按钮,并使用一种方法来阻止他们通常所做的事情。
例如:
$("form button").on('click', function(e){ e.preventDefault(); });

答案 1 :(得分:0)

我可能会尝试这样的事情

$('#someForm').on('submit', function(e) {
    if ($(this).data('some-action')) {
        e.preventDefault();
        return false;
    }
    //... then disable buttons, etc
});

在这种情况下,您需要将属性data-some-action添加到表单中,使用您正在执行的任何后端验证进行评估。

<强>更新

$('#someForm').on('submit', function(e) {
    if ($(this).data('some-action') == 'error-message') {
        e.preventDefault();
        alert('error!');
        return false;
    }
    if ($(this).data('some-action') == 'reload') {
        e.preventDefault();
        document.location.reload(true);
    }
    //... then disable buttons, etc
});