使用preventDefault()时,如何在按钮单击时提交表单?

时间:2012-07-20 14:34:20

标签: jquery forms submit

当用户点击[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');

  }
}

任何人都可以告诉我他在点击按钮时提交表单的代码是什么?

5 个答案:

答案 0 :(得分:26)

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

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

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

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

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

答案 1 :(得分:5)

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

据我所知,没有办法判断表单是由Enter键还是提交按钮提交的。

答案 2 :(得分:5)

替换它:

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

用这个:

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

FIDDLE

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

答案 3 :(得分:4)

您需要使用

$(this).parents('form').submit()

答案 4 :(得分: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();
});