我可以让IE7、HTML5表单验证和jQuery.submit事件一起工作吗
这是我的表格:我可以让IE7、HTML5表单验证和jQuery.submit事件一起工作吗,jquery,forms,html,validation,internet-explorer-7,Jquery,Forms,Html,Validation,Internet Explorer 7,这是我的表格: <div id="MyModal" class="m-modal-container"> <div class="form-wrap"> <form id="form_reg" class="m-form reg-form" action="www.somedomain.com/subPage"> <div class="form-element email"> <input type="ema
<div id="MyModal" class="m-modal-container">
<div class="form-wrap">
<form id="form_reg" class="m-form reg-form" action="www.somedomain.com/subPage">
<div class="form-element email">
<input type="email" class="text" name="email" id="email" value="" placeholder="Email Address" title="Email is required." maxlength="90" required>
</div>
<div class="form-element buttons">
<button type="submit" class="button primary submit">Register</button>
</div>
</form>
</div>
</div>
我的问题:
此表单在主页上显示为模式。用户填写它,然后单击submit,它将进入一个新页面。它使用HTML5表单验证来指示必填字段。它使用webShims/polyfill实现旧浏览器兼容性
这一切都是正常的。我的问题出现在某些情况下,我不希望表单提交到“子页面”(表单上的默认操作)。相反,我希望它只是关闭模态表单,停留在显示模态的页面上。(如果电子邮件已在系统中,则会发生这种情况-不希望将用户带到显示电子邮件已在系统中的消息的辅助表单页面)
如果我使用$(“#MyModal#form#reg”)。单击(函数(事件){blah blah});-然后我可以控制提交和不提交。然而,我失去了HTML5表单验证功能。如果我使用$(“#MyModal#form#reg”).submit(函数(事件){blah blah});表单验证工作正常,但页面提交,代码未捕获事件
到目前为止,我所做的所有研究都表明IE7不能很好地处理.submit事件,但是,我需要.submit事件来进行表单验证
有没有办法让这三样东西一起工作?IE7是导致我的问题的唯一浏览器。.submit/表单验证按照FF、IE9、Opera和Chrome中的预期工作
如有任何建议,将不胜感激。谢谢。尝试使用
.preventDefault()
停止默认提交操作
$("#MyModal #form_reg").submit(function(event){
var initial_id = 0;
event.preventDefault();
// your code here
客户端表单验证的大多数跨浏览器解决方案之一是动态禁用HTML5验证(例如,通过使用JS将
novalidate
属性添加到form
元素),并对所有浏览器使用相同的自定义JavaScript验证代码路径
因此,当JS被禁用时,HTML5验证将至少在现代浏览器中起作用,而如果JS被启用,JavaScript验证将在所有浏览器中起作用。那么提交事件应该在IE7中起作用。它应该由jQuery规范化。所以这很奇怪。我会说:试着删除webshims(只是为了测试),看看你的提交处理程序是否被调用,如果它工作,可能是webshims错误(请报告这个。然后)。如果它仍然不工作,那应该是jQuery错误 要解决您的问题,您可以执行以下操作:
- 删除验证$(“#MyModal#form#reg”).prop('noValidate',true)李>
- 钩住提交或单击按钮
- 并使用checkValidity+显示验证消息检查处理程序内部的有效性
$("#MyModal #form_reg").submit(function(event){
var initial_id = 0;
event.preventDefault();
// your code here