10

当用户单击 [ENTER] 键时,我正在使用 jQuery.preventDefault()来防止表单提交。问题是当我单击提交按钮时它也会停止表单提交。

我看到 Stackoverflow 上有很多关于 的线程.preventDefault(),但没有一个能解决我的问题。

这是我目前正在处理的代码。

// Part of my form
<form id="subscription_order_form" class=""  method="post" action="some_url"> 
  <button id="btn_order" type="submit">Order</button>
</form>

// Prevent the form to be submitted on ENTER
$('#subscription_order_form').submit(function(e){
  e.preventDefault();
});

// Controll data
$('#btn_order').click(function(){
  checkMandatoryFields();
});


// Check mandatory fields before subitting:
function checkMandatoryFields(e){

  // Code for testing here

  // Set "error" message and abort submission
  if(msg.length > 0) {
    // Do something
  } else {

    //submit or trigger is not recognized as functions
    $('#subscription_order_form').submit(); //.trigger('submit');

  }
}

谁能告诉我他在单击按钮时提交表单的代码是什么?

4

5 回答 5

31

在 DOM 节点上触发提交事件,而不是 jQuery 对象。

$('#subscription_order_form')[0].submit();

或者

$('#subscription_order_form').get(0).submit();

或者

document.getElementById("subscription_order_form").submit();

这绕过了允许表单正常提交的 jQuery 绑定事件。

于 2012-07-20T14:44:03.427 回答
5

将提交按钮更改为普通按钮并在其 onClick 事件中处理提交。

据我所知,无法判断表单是通过 Enter Key 还是提交按钮提交的。

于 2012-07-20T14:38:06.663 回答
5

你需要使用

$(this).parents('form').submit()
于 2012-07-20T14:39:14.520 回答
5

替换这个:

$('#subscription_order_form').submit(function(e){
  e.preventDefault();
});

有了这个:

$('#subscription_order_form').on('keydown', function(e){
    if (e.which===13) e.preventDefault();
});

小提琴

这将阻止表单在按下 Enter 键时提交,因为它会阻止键的默认操作,但表单将在单击时正常提交。

于 2012-07-20T14:42:55.453 回答
0

好的,首先e.preventDefault();它不是一个 Jquery 元素,它是一个 javascript 的方法,现在它是真的,如果你添加这个方法,你可以避免提交事件,现在你可以做的是通过 ajax 发送表单这样的东西

$('#subscription_order_form').submit(function(e){
    $.ajax({
     url: $(this).attr('action'),
     data : $(this).serialize(),
     success : function (data){

      }
   });
    e.preventDefault();
});
于 2012-07-20T14:41:12.770 回答