Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以让IE7、HTML5表单验证和jQuery.submit事件一起工作吗_Jquery_Forms_Html_Validation_Internet Explorer 7 - Fatal编程技术网

我可以让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+显示验证消息检查处理程序内部的有效性

我确实在正确的情况下使用event.preventDefault()。但这不是问题所在。甚至没有在IE7中注册.submit事件(我尝试在.submit事件后添加一条警报语句作为第一行,但它从未显示)。如上所述,我的研究表明IE7不支持.submit事件。但是.click事件取代了HTML5表单验证。因此,我试图弄清楚如何保持HTML5表单验证,但仍然能够控制提交与不提交,因为HTML5(样式化)表单验证实际上在IE7中工作。使用webshims/polyfiller实现向后浏览器兼容性。我提到表单验证只是为了解释为什么我不能只使用.click事件,因为它取代了表单验证。如果我允许表单自然地“流动”,依赖于它的动作标签(这在我90%的用例中都是合适的)-表单验证工作出色,呈现方式与所有现代浏览器相同。问题出现在10%的情况下,我需要更改表单提交的操作-在不采取任何操作的情况下关闭模式表单显示,或执行与正常情况下不同的操作。同样,我可以使用.click事件,但它会取代表单验证,因为这只发生在.submit事件上。据我所知,IE7不支持.submit事件。所以,我只是想弄清楚是否有人找到了让IE7和.submit事件一起工作的方法,或者提出了一个等效的解决方案。
$("#MyModal #form_reg").submit(function(event){
    var initial_id = 0;

    event.preventDefault();

   // your code here