Javascript event.preventDefault()或返回false don';我不在IE9工作

Javascript event.preventDefault()或返回false don';我不在IE9工作,javascript,cross-browser,internet-explorer-9,Javascript,Cross Browser,Internet Explorer 9,我正试图让以下代码在IE的所有版本中都能正常工作,就像在其他浏览器中一样: <a href="" class="specificClass">Click Me </a> //Javascript $(".specificClass").click( function(e) { e.preventDefault();

我正试图让以下代码在IE的所有版本中都能正常工作,就像在其他浏览器中一样:

  <a href="" class="specificClass">Click Me </a>
    //Javascript
     $(".specificClass").click(
                        function(e) {
                            e.preventDefault();
                           // Do Something
                             //return false; Doesn't work either
                        }
                );
这两种方法似乎都会触发要调用的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

}

功能剂量仪(me){
//不需要event.preventDefault,因为javascript是通过href添加的
}
但是,我不想让我所有的锚定标记都使用href=“javascript:”或onclick=“doSomething”,只是为了让它在IE9中工作。 我也不想使用不同的标记(例如,尝试使用span标记),因为在所有浏览器中都很难设置样式

还有其他想法吗

看起来这是一个合法的错误,我已经提交了一个修复它的请求。目前,我还提出了一个解决方案:
在IE9中,遗留事件处理程序模型仍然部分使用
preventDefault()
仅在使用
addEventListener()
附加事件侦听器时有效

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

event.returnValue = false;
event.cancelBubble = true; // This is affects like event.stopPropagation() in older IEs
虽然jQuery不工作很奇怪,但我对此没有任何解释。。。除非您在兼容模式下运行IE并使用jQuery 2.X


编辑


此外,在IE9中,对
console
对象的引用将中断IE中的代码。遗留事件处理程序模型仍在部分使用
preventDefault()
仅在使用
addEventListener()
附加事件侦听器时有效

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

event.returnValue = false;
event.cancelBubble = true; // This is affects like event.stopPropagation() in older IEs
虽然jQuery不工作很奇怪,但我对此没有任何解释。。。除非您在兼容模式下运行IE并使用jQuery 2.X


编辑


此外,对
控制台
对象的引用将破坏IE中的代码,这可能是由于事件冒泡造成的

请参阅此链接:


这可能是由于事件冒泡

请参阅此链接:


对于IE9,如果站点上的任何位置都有console.log,则会出现意外行为,除非您打开了开发人员工具。对于实际用户来说是不可能的

查看它在没有任何console.log(在IE9中)的情况下是如何工作的:jsfiddle.net/4hfjq/10,但当您这样做时则不会:jsfiddle.net/4hfjq/20尝试重新定向到“”页面,除非您打开了开发人员工具

在我的例子中,有太多的console.log,所以我采用了另一种解决方法,即使用
并在不使用JQuery.eventType方法的情况下定义该代码。检查此项:jsfiddle.net/4hfjq/22

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

查看它在没有任何console.log(在IE9中)的情况下是如何工作的:jsfiddle.net/4hfjq/10,但当您这样做时则不会:jsfiddle.net/4hfjq/20尝试重新定向到“”页面,除非您打开了开发人员工具

在我的例子中,有太多的console.log,所以我采用了另一种解决方法,即使用

并在不使用JQuery.eventType方法的情况下定义该代码。检查:jsfiddle.net/4hfjq/22

我在代码中看到了jQuery-注意jQuery事件和普通DOM事件是不同的,即使在jQuery中也不起作用吗?当然,它在所有其他浏览器中都起作用?只是为了记录,在实际页面中,JS上面的第一个在脚本标记中,在链接下面-正确吗,代码位于Javascript文件中,JQuery作为库包含。preventDefault即使在JQuery格式中也不起作用,尽管它看起来像是被触发的(使用开发人员工具添加了一个调试点)。我的代码只是一个例子来说明发生了什么@当然了:)如果有帮助,HTML是通过ASP代码生成的。可能有什么事情没有添加。单击后及时在JQuery中单击触发器?我在代码中看到JQuery-注意JQuery事件和普通DOM事件是不同的,即使在JQuery中也不起作用吗?当然,它在所有其他浏览器中都起作用?只是为了记录,在您的实际页面中,上面的第一个JS位于一个脚本标记中,在链接下面-正确吗?是的,代码位于一个Javascript文件中,JQuery包含在一个库中。preventDefault即使在JQuery格式中也不起作用,尽管它看起来像是被触发的(使用开发人员工具添加了一个调试点)。我的代码只是一个例子来说明发生了什么@当然了:)如果有帮助,HTML是通过ASP代码生成的。也许那里发生了什么事情,没有在点击时及时在JQuery中添加.click触发器?考虑到他的帖子内容-修复这个问题会让我感到惊讶,因为他使用的JQuery已经规范化了这一点。嗯。。看来我把这里搞砸了。。。也许我会等待OP的回应,因为我现在还没有下手。虽然我在帖子中也看到了一个内联的
onclick()
,但大家好,谢谢你们的回答。不幸的是,除非我在IE中打开了调试器,否则这也不起作用,而且它似乎会触发。是否可能在通过JQuery应用.click之前调用默认行为。我正在使用JQuery 1.8,无法控制我们使用的是哪个版本。@Amy在您的评论之后,您的处理程序函数中似乎有一个
console.log()
。如果控制台未打开,IE9无法识别
控制台。只需删除/注释掉
控制台
调用,您的jQuery就会正常工作。“
除非我在IE中打开了调试器,否则无法工作”
“显然指向
控制台
对象的引用,考虑到他的帖子内容,这在IEF中是
未定义的
——修复这个问题会让我感到惊讶,因为他使用的jQuery已经规范了这一点。嗯。。看来我把这里搞砸了
// 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
    }
}
event.stopPropagation();