为什么JavaScript提交重新加载页面和通过按钮提交进行客户端页面验证

为什么JavaScript提交重新加载页面和通过按钮提交进行客户端页面验证,javascript,jquery,asp.net-mvc,forms,Javascript,Jquery,Asp.net Mvc,Forms,我对jquery.validate和jquery.validate.unobtrusive有奇怪的行为 若我像这样调用SubmitMVC表单,那个么页面将被重新加载,验证工作正常 <a href="#" onclick="document.getElementById('myform').submit();"> <div class="span2 btn">

我对jquery.validate和jquery.validate.unobtrusive有奇怪的行为

若我像这样调用SubmitMVC表单,那个么页面将被重新加载,验证工作正常

  <a href="#" onclick="document.getElementById('myform').submit();">
                            <div class="span2 btn">
                                <div class="span2 top10 playText">

                                </div>
                            </div>
                        </a>

如果提交表格

 <input id="subBtn" type="image"                            
 src="/images/free.jpg"class="main_img" />

客户端的验证工作


有什么区别?如何使其始终通过客户端工作?

您必须在提交按钮上触发事件:

document.getElementById('subBtn').click();
$('#subBtn').trigger('click');

本机浏览器验证是通过单击“提交”按钮触发的,而不是通过提交表单触发的-这是两个不同的事件。

您可以防止表单提交这样的值:

$("#myForm").submit(function (e) {
    //Cancel the form post
    e.preventDefault();

    // ... Rest of your code validation

}
DOM元素(不是jQuery对象)上的方法提交表单时不调用任何附加的
onsubmit
事件处理程序,因此您的验证被绕过

相反,使用提交按钮或图像会调用任何提交事件处理程序

您可以改用jQuery提交方法:

$('#myform').submit();
这将调用任何提交处理程序

注意,如果您的验证是您自己的JavaScript或jQuery验证,那么这是可以的,如果您使用的是HTML5验证,那么您必须触发submit按钮的click事件:

document.getElementById('subBtn').click();
$('#subBtn').trigger('click');

为什么这比form.submit()好?实际上,只有在单击submit按钮时才会触发验证
form.submit()
绕过此选项。您应该在答案中添加此选项;)