阻止默认事件在IE中不起作用

3

我正在尝试使用ajax提交表单,表单本身是通过ajax事件加载的。

以下Jquery代码适用于FF和chrome。在IE中,无法阻止表单提交。

$("#admin_main").delegate("#create_user_form", "submit", function (event) {
    if (event.preventDefault) {
        event.preventDefault();
    } else {
        event.returnValue = false;
    }
    $.post('create_user', $("#create_user_form").serialize(), function (data) {
        $("#admin_main").html(data);
    }, "html");
});

有什么变通办法吗?

我担心你可能会遇到严重的问题... 有一次我需要阻止onkeyup事件的默认行为。但在IE中它不起作用。我从未找到任何解决方案(这是使用纯JavaScript)。 - rhino
1个回答

2
jQuery会进行规范化处理,您可以放心地调用.preventDefault(),如下所示:
$("#admin_main").delegate("#create_user_form", "submit", function (event) {
  event.preventDefault();
  $.post('create_user', $("#create_user_form").serialize(), function (data) {
    $("#admin_main").html(data);
  }, "html");
});

或者如果你想完全取消事件,return false

$("#admin_main").delegate("#create_user_form", "submit", function () {
  $.post('create_user', $("#create_user_form").serialize(), function (data) {
    $("#admin_main").html(data);
  }, "html");
  return false;
});

之所以可以称其为“调用”,是因为你处理的不是特定于浏览器的事件对象,而是具有规范化行为的jQuery事件对象


1
@RisingSun - 如果你遇到了问题,那么它不是上面的代码引起的...例如无效的标记或在此之前的任何JS错误都会导致程序崩溃,正常的浏览器行为接管...你没有在状态栏中看到错误吗? - Nick Craver
好的。控制台显示两个事件迅速发生。 - Mr Hyde
@RisingSun - 你完全没有收到任何错误吗?使用的是哪个版本的IE? - Nick Craver
明白了!IE9 有些兼容性问题。我会立即卸载它。谢谢。 - Mr Hyde
@RisingSun - 啊,这样就说得通了 :) 如果有帮助的话,IE9仍然存在许多JavaScript/事件问题,还需要做一些工作 :) - Nick Craver
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接