我正在尝试使用jQuery提交表单,但有时它会挂起浏览器,有时会崩溃。我正在使用jQuery validate插件,我希望在验证通过后提交表单。我是否有可能在验证通过后正常提交表单,我不想用jQuery提交
这是我的小代码片段。
var validate = function () {
$('#contactForm').validate({
rules: {
'first-name': {
required: true
},
'sur-name': {
required: true
}
},
submitHandler: function (form) {
$('#contactForm').submit();
return false;
}
});
};
$('#submitEnquiryForm').click(validate);
答案 0 :(得分:5)
那是因为验证通过(侦听提交事件)并且您一次又一次地触发submit
事件。
submit -> validate -> submit -> validate -> ... -> crash(maximum call stack size exceeded)
尝试:
form.submit();
或:
$('#contactForm')[0].submit();
将正常提交表单,并且不会调用validate
方法。
答案 1 :(得分:1)
您可以使用它而不是jquery.validate:
<style>
.error {
border: 2px solid red;
}
</style>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.js" type="text/javascript"></script>
</head>
<body>
<form id="contactForm" action="javascript:alert('submitted')">
<input type="text" id="first-name"/>
<input type="text" id="sur-name"/>
<input type="submit" />
</form>
</body>
<script>
$('#contactForm').submit(function (event) {
fname = $('#first-name');
sname = $('#sur-name');
if (!fname.val())
{
fname.addClass('error');
event.preventDefault();
}
else
{
fname.removeClass('error');
}
if (!sname.val())
{
sname.addClass('error');
event.preventDefault();
}
else
{
sname.removeClass('error');
}
});
</script>
答案 2 :(得分:0)
在jquery中使用.Off()事件。 .off()方法删除事件处理程序 用.on()附加的。
$('#submitEnquiryForm').off("click").on("click" , validate);
答案 3 :(得分:0)
据我所知,当您点击#submitEnquiryForm
验证#contactForm
并提交时,您的代码就会出现。 ¿好吗?
submitHandler
函数,因此您处于无限循环中;提交事件触发器再次提交。
您无需在submit
中致电submitHandler
。
我认为一定是:
$('#contactForm').validate({
rules: {
'first-name': {
required: true
},
'sur-name': {
required: true
}
}
});
$('#submitEnquiryForm').click(function(){
$('#contactForm').submit();
});
如果要使用点击#submitEnquiryForm
而不是其提交按钮,则在触发提交事件时验证表单。 submitHandler
函数适用于其他purpouse,就好像您想在提交之前进行其他操作或测试一样。