提交按钮不会在IE上触发jQuery bind’ed提交事件

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

var formNode = $('
');

我将一堆其他元素附加到表单(表格中包含输入元素的字段集)。 然后我将表单附加到DOM,然后绑定提交处理程序:

 formNode.bind('submit', function (ev) { alert('submit of form!'); // do lots of stuff.... } 

这适用于我的Mac上的Safari(是的,我是Mac人),以及Windows上的Safari和Firefox,但是当我使用IE 8时单击提交按钮时,从不调用警报。相反,浏览器尝试提交对/的GET请求(我没有为表单设置方法或操作 – 也许这是必要的?)。

任何见解将非常感激,因为我正在进行更改命中或未命中以进行调试。

在Internet Explorer中使用jQuery从表单元素中侦听事件存在各种问题。 关于jQuery论坛有一系列评论:关于IE的特定问题(’submit’) 。 当然,我知道你使用的是bind而不是live但许多描述的问题都涉及尝试使用bind

我评论了你的答案,询问你正在使用哪个版本的jQuery。 如果你还没有,我可以这样做,我会升级到最新版本。

一些代码解决方案:

将提交处理程序绑定到body元素的每个子元素
在上述jQuery论坛讨论中改编自synertech1的答案。

 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(); }); 

您还没有说过您正在使用的HTML级别,但FWIW, action是HTML4中form元素的必需属性。 因此,如果浏览器在没有它的情况下表现得很奇怪,那就太不足为奇了。 (在HTML5中, validation器表示不再需要它,可能是因为现在允许在提交按钮本身上使用其中的一些内容。)

你还记得从事件处理程序return false (或event.preventDefault() )吗? 如果没有,表单将继续提交,有效地导航到action URL,或者与当前文档相同的URL(如果没有)。 虽然确实应该对HTML有效性action 一些 action ,并尽可能提供有效的非JavaScript解决方案(渐进增强等等)。

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