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

时间:2010-09-24 14:04:59

标签: jquery internet-explorer forms

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

var formNode = $('<form>');

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

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

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

任何见解都会非常受欢迎,因为我为了调试而进行了改变命中。

3 个答案:

答案 0 :(得分:2)

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

我评论了你的答案,询问你正在使用哪个版本的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();
 });

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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