我正在尝试将以下代码用于所有版本的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
答案 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)