我有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请求(我没有为表单设置方法或操作 - 也许这是必要的?)。
任何见解都会非常受欢迎,因为我为了调试而进行了改变命中。
答案 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错误报告和/或使用调试器。