jQuery jquery表单验证ajaxSubmit()
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6026574/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
jquery form validation ajaxSubmit()
提问by robx
I am getting very frustrated with this jquery form validation ajaxSubmit();
我对这个 jquery 表单验证 ajaxSubmit() 感到非常沮丧;
In chrome, it seems to fail silently without even hitting the submitHandler, firefox does, but still goes on to the action="contact.php" page. I was expecting it to just post in the background and possibly return results, but can't get it to work that way.
在 chrome 中,它似乎在没有点击 submitHandler 的情况下静默失败,firefox 确实如此,但仍然继续到 action="contact.php" 页面。我期待它只是在后台发布并可能返回结果,但无法让它以这种方式工作。
Edit: Found a fix for this if anyone else is interested, put this line of code somewhere in your dom ready.
编辑:如果其他人有兴趣,请找到解决此问题的方法,将这行代码放在您的 dom 中的某处准备好。
// disable HTML5 native validation and let jquery handle it.
$('form').attr('novalidate','novalidate');
HTML form:
HTML表单:
<form method="post" action="contact.php" id="contact">
<fieldset>
<input type="text" id="email" class="required email" name="email" maxlength="30" value="youremail @ example.com" />
<input type="text" id="subject" class="required" name="subject" maxlength="24" value="Enter your subject" />
<textarea id="msg" class="required textarea" name="msg" cols="30" rows="5">Reason for contact.</textarea>
<input type="submit" class="formBtn" value="Punch me an Email" />
</fieldset>
</form>
JQuery:
查询:
$(window).load(function(){
$('#contact').validate({
rules:{
email:{required: true, email:true},
subject:{required: true, minlength: 5},
msg:{required: true, minlength: 50}
},
messages:{
email:'',
subject: '',
msg: ''
},
invalidHandler:function(){
$('div.error').hide();
},
focusInvalid:true,
onfocusout:false,
submitHandler: function() {
// never hits with chrome, and alert works in FF4,
// but still goes to contact.php
$('#contact').ajaxSubmit();
}
});
});
回答by istvan.halmen
I'm not really familiar with the validation plugin, but I would try it the other way around, by validating the form in the form plugin's beforeSubmit event:
我对验证插件不是很熟悉,但我会反过来尝试,通过在表单插件的 beforeSubmit 事件中验证表单:
$('#contact').ajaxForm({
beforeSubmit: function() {
$('#contact').validate({ /* ... */ });
return $('#contact').valid();
},
success: function(resp) {
alert(resp);
}
});
回答by Tgr
submitHandler
is called after a submit event is fired, thus ajaxForm
registers its own submit event handler after the submit event, which is probably too late to catch it.
submitHandler
在触发提交事件后调用,因此ajaxForm
在提交事件之后注册自己的提交事件处理程序,这可能为时已晚,无法捕获它。
You don't have to nest the two plugins, just validate first and ajaxify second:
您不必嵌套这两个插件,只需先验证然后 ajaxify:
$('#contact').validate({...});
$('#contact').ajaxForm();
That way, the validation event handler is called first, and the event is stopped before getting to the ajax submit handler if it is invalid.
这样,首先调用验证事件处理程序,如果它无效,则在到达 ajax 提交处理程序之前停止该事件。
回答by user3020010
<form id="Form1">
...
<button type="submit" onclick="return SendData()">
</form>
<script>
$(function () {
$("#Form1").validate();
});
function SendData(){
if ($("#Form1").valid()) {
$.ajax({
url: "/WebService/....",
type: "post",
dataType: "json"
//....
});
//do ajax but not submit
return false;
}
// checkdata
return true;
}
</script>