在 jQuery 中取消 $('form').submit() 调用

Cancel a $('form').submit() call in jQuery

我在 jQuery 中使用表单提交事件时遇到了麻烦。

加价

<form>
    <input type="text" name="username" />
    <a id="btn_submit">Submit</a>
    <input type="submit" />
</form>

事件侦听器

function valid() { return false; }

$('form').submit(function() {
    if(!valid()) {
        return false;
    }
});

然后,当我点击 <input type="submit" /> 时,它会触发该事件,并且可以取消提交事件。


但是当我在.btn_submit标签上触发表单提交时,returnfalse无法取消提交。

取消失败

$('#btn_submit').click(function() {
    $('form').submit();
    // $('form').trigger('submit');
    // document.forms[0].submit();
});

所以,现在的问题是,如果我必须使用 a.btn_submit 来触发表单提交,我想取消该提交以防万一。

  1. 我该如何触发?
  2. 我应该如何取消?

请帮忙!


我做了一个fiddlehttp://jsfiddle.net/69wcduv5/2/.

但是在js里好像不能提交fiddle.


我最后的解决方案(有点脏)

我可以在表单内创建一个提交输入,然后点击它。然后删除它。

如果我以这种方式触发提交,我的行为与我预期的完全一样:

  1. $('form').submit(function() {});里面的验证码不用改。
  2. 如果表格有类似<input type="text" required />的东西,它就可以做得很好。
  3. 我可以在那个主播上打扮得很好。不是他妈的国王 <input type="submit" />

谢谢大家的耐心等待,致以最诚挚的问候。

并希望有一个更好的解决方案。

$("a.btn_submit").click(function(){
  if($('form').valid())
  {
     $('form').submit();
  }
});
$('form').submit(function(event) {
    if(!valid()) {
        event.preventDefault();
    }
});

我明白你要达到什么目的了,所以请忽略我之前写的内容。

formElement.submit() 及其等效的 jQuery 故意不触发 onsumbit 事件。否则有无限递归的潜力。

因此,您不能执行$('form').submit();并希望onsubmit处理程序进行拦截。

您最好的选择可能是您的 "dirty" 想法。即触发对(隐藏)type="submit" 按钮的点击。

使用 link 提交表单似乎很奇怪,但你的问题是你没有取消对锚点的点击操作。

$('.btn_submit').on("click", function(evt) {
    evt.preventDefault();
    $('form').submit();
});

这样调用提交,最符合我的意图:

$.fn.natural_submit = function() {
    if($(this).is('form')) {
        var $form = $(this);
        var $input_submit = $('<input type="submit" />').hide().appendTo($form);
        $input_submit.trigger('click');
        $input_submit.remove();
    }
}

$('#btn_submit').click(function() {
    $('form').natural_submit();
});