当用户点击[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');
}
}
任何人都可以告诉我他在点击按钮时提交表单的代码是什么?
答案 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();
});
这会阻止在按下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();
});