Submit按钮不会触发jQuery绑定';教育署提交有关IE的活动

Submit按钮不会触发jQuery绑定';教育署提交有关IE的活动,jquery,internet-explorer,forms,Jquery,Internet Explorer,Forms,我对IE有一个问题(8,7没有测试)。我有一个非常简单的情况:我创建一个表单元素 var formNode = $('<form>'); 这适用于Mac上的Safari(是的,我是Mac迷),以及Windows上的Safari和Firefox,但当我在使用IE 8时单击submit按钮时,不会调用此警报。相反,浏览器尝试提交一个GET请求/(我没有为表单设置方法或操作-也许这是必要的?) 如果我为了调试而随意更改,请提供任何见解。您没有说明您使用的HTML级别,但FWIW,操作是H

我对IE有一个问题(8,7没有测试)。我有一个非常简单的情况:我创建一个表单元素

var formNode = $('<form>');
这适用于Mac上的Safari(是的,我是Mac迷),以及Windows上的Safari和Firefox,但当我在使用IE 8时单击submit按钮时,不会调用此警报。相反,浏览器尝试提交一个GET请求/(我没有为表单设置方法或操作-也许这是必要的?)


如果我为了调试而随意更改,请提供任何见解。

您没有说明您使用的HTML级别,但FWIW,
操作
是HTML4中
表单
元素的必需属性。因此,如果一个浏览器在没有它的情况下表现异常,也就不太令人惊讶了。(在HTML5中,表示不再需要它,可能是因为现在提交按钮本身允许使用某些内容。)

您是否记得从事件处理程序返回false(或
event.preventDefault()
)?如果没有,表单将继续提交,有效地将您导航到
操作
URL,或者与当前文档相同的URL(如果没有)。虽然确实应该有一些
操作
,既可以提高HTML的有效性,也可以在可能的情况下提供一个非JavaScript的解决方案(渐进增强等等)


如果确实有
返回false
,请确保在函数到达
返回false
之前中止函数的处理程序代码中没有发生JavaScript错误。在Internet选项中打开JS错误报告和/或使用调试器。

在Internet Explorer中使用jQuery从表单元素侦听事件时会出现各种问题。jQuery论坛上有一系列关于以下内容的评论: . 诚然,我知道您正在使用
bind
而不是
live
,但所描述的许多问题都涉及到尝试同时使用这两种方法

我对您的回答发表了评论,询问您使用的是哪个版本的jQuery。如果您还没有并且可以这样做,我会升级到最新版本

一些代码解决方案:

将提交处理程序绑定到body元素的每个子元素
改编自前面jQuery论坛讨论中的答案

var submitHandler = function() { ... };

$("body").children().each(function() {
      $("form", this).bind("submit", submitHandler);
})
绑定到提交输入类型
我讨厌这个选项,因为表单元素是更适合绑定的元素

 $('form > input[type*="submit"]').bind('click', function(event) {
     var form = $(this).parent;
     form.submit();
     event.preventDefault();
 });

“(我没有为表单设置方法或操作-也许这是必要的?”“您尝试过吗?为什么将处理程序绑定到表单的提交事件而不是按钮的单击事件?您使用的是什么版本的jQuery?我从Google的CDN中提取jQuery 1.4.2.min。单独来说,我有生成表单的简单代码,我附加了一个提交处理程序,所有这些都可以正常工作。在我的应用程序的上下文中,这个简单的测试用例失败了,所以有一些交互。。。我正在尝试隔离…嗯,我发现了问题,但还没有治愈。我的应用程序使用(很棒的)Sammy——一种类似Sinatra的浏览器事件路由器()。Sammy本身绑定到所有提交元素。所以,我的IE问题一定是绑定事件回调的顺序问题,我正在研究.HTML 4。我尝试在元素创建时设置action=“”,但现在表单甚至无法在IE 8上渲染(适用于Mac Safari)。将继续尝试…
action=“
也无效。尝试
action=“#”
。但是如果表单甚至没有呈现,坦率地说,我怀疑其他地方有更大的问题。好奇:如果我尝试在jQuery元素创建中设置action=“#”,那么元素就不会被创建,表单也不会呈现;代码:formNode=$('')。。。。但是,如果我通过.attr('action','#')设置操作,那么表单将呈现。但是,提交绑定仍然不起作用。我认为我们可能需要看到更多的代码。当然,仅仅使用上面的代码是不可复制的(好吧,在修复了微不足道的
之后)。我的代码遇到问题时,会在大量其他代码的上下文中执行。我正在创建一个独立的测试用例。如果我没有做到这一点,那么我知道问题在于我的上下文。我希望我有需要停止传播的问题:-),但问题是提交处理程序甚至没有执行。是的,代码返回false。现在,为了进行测试,我在输入时发出一个警报-这不会发生-然后返回false。。。至于需要采取行动。。。我的用例是一个浏览器内Javascript应用程序-服务器无法执行任何操作,因为此表单操作的所有功能都发生在处理程序中。这适用于除IE之外的所有浏览器。我的应用程序在任何方面都不是“渐进式”的-如果Javascript不工作,那么应用程序就是DOA。感谢链接和建议。我试图缩小问题的范围,因为我发现,如果我用一个表单和一个提交按钮构建一个最小的HTML文件并绑定到它,IE就可以工作了。所以我花了几个小时在我的应用程序中实例化一个表单和按钮,找到它的工作原理。。。而在它不起作用的地方,我试图在一条分界线上磨砺,这条分界线可能会阐明为什么它在某些情况下有效,而在其他情况下无效。我希望我没有徒劳地转动轮子。@Zhami在您的测试中,您将事件绑定到什么,按钮还是表单?建议将提交处理程序绑定到body元素的每个子元素,因为有人猜测,文档级别的事件绑定表单事件有被IE丢失的倾向。我将它们绑定到body,看看会发生什么。我绑定到表单本身。我希望这样做,因此将继续调查“冲突”(与Sammy库的冲突),看看是否可以找到一个重点解决方法。@绑定到body的Zhami仍在表单元素中工作,但正在侦听body元素上的事件。:)
 $('form > input[type*="submit"]').bind('click', function(event) {
     var form = $(this).parent;
     form.submit();
     event.preventDefault();
 });