event.preventDefault()或返回false在IE9中不起作用

时间:2013-12-23 21:00:58

标签: javascript cross-browser internet-explorer-9

我正在尝试将以下代码用于所有版本的IE,因为它可以在其他浏览器中找到:

  <a href="" class="specificClass">Click Me </a>
    //Javascript
     $(".specificClass").click(
                        function(e) {
                            e.preventDefault();
                           // Do Something
                             //return false; Doesn't work either
                        }
                );

切换到href="#"会使其尝试转到页面顶部,同样仅在IE9中。例如: 将href=""重定向到IE9中的当前链接本身。

<a href="#" onclick="doSomething(this); return false;"> Click Me Two </a>

似乎两种方法都会触发onclick Javascript被调用,但href=""的默认行为不会被覆盖。如果我使用event.preventDefault()则没有任何反应。

以下方法有效:

<a href="javascript:doSomething(this);"> Click Me Two </a>
function doSomething(me) {

    // event.preventDefault is not needed as the javascript is added via href

}

但是我不希望href =“javascript:”或onclick =“doSomething”用于所有我的锚标签只是为了让它在IE9中工作。 我也不想使用不同的标签(例如尝试使用span标签),因为在所有浏览器中设置样式都很棘手。

还有其他想法吗?

看起来这是一个合法的错误,我已经提交了修复它的请求。我现在也提出了一个解决方法: https://connect.microsoft.com/IE/feedback/details/812247/event-preventdefault-or-return-false-dont-work-in-ie9

3 个答案:

答案 0 :(得分:3)

在IE9中,遗留事件处理程序模型仍然是部分使用的。 preventDefault()仅在使用addEventListener()附加事件侦听器时才有效。

如果要阻止内联处理程序执行默认操作,则必须使用旧方法:

event.returnValue = false;
event.cancelBubble = true; // This is affects like event.stopPropagation() in older IEs

虽然jQuery不工作很奇怪,但我没有解释...除非你在兼容模式下运行IE并使用jQuery 2.X?


修改

如果没有打开Dev Tools,对console对象的引用也会破坏IE&lt; 10中的代码。你可以在SO找到很多针对这个问题的修复程序。我最喜欢的是:

// The very first lines in the global context
if (!window.console) {
    window.console = {
        log: function () {}
        // Add other console methods, if the scripts on the page are using them
    }
}

虽然使用上面的代码可以避免console问题,但最好从要发布的最终代码中删除所有记录。

答案 1 :(得分:1)

对于IE9,如果网站上的任何地方有任何console.log,除非您打开开发人员工具,否则会出现意外行为。对于实际用户来说不太可能。

如果没有任何console.log(在IE9中),请查看它是如何工作的:jsfiddle.net/4hfjq/10,但是当你这样做时:jsfiddle.net/4hfjq/20尝试重定向到“”页面,除非你打开了开发者工具。

在我的情况下,有太多的console.logs,所以我采用另一种解决方法,即使用 <a href="javascript:doSomething()">Link </a>并在不使用JQuery .eventType方法的情况下定义该代码。检查一下:jsfiddle.net/4hfjq/22

答案 2 :(得分:0)

这可能是由于事件冒泡造成的。

查看此链接: http://api.jquery.com/event.stopPropagation/

event.stopPropagation();