【发布时间】:2013-09-24 16:51:13
【问题描述】:
这似乎适用于几乎所有浏览器,除了 IE8(可能还有 IE7,但我还没有尝试过),我不知道为什么。
$('body')
.on('click', '.toggle', function(e){
$(this).toggleClass('active');
e.preventDefault();
e.stopPropagation();
});
我注意到,当我单击归类为 toggle 的链接时,尽管有 e.preventDefault(),浏览器仍会转到页面顶部。在调查问题时,我看到了返回 false 或设置 event.returnValue = false 等解决方案。我已经尝试了这两种方法,首先测试e.preventDefault(),然后在不满足条件时执行替代方法。
设置返回值:
$('body')
.on('click', '.toggle', function(e){
if (e.preventDefault()) {
e.preventDefault();
} else {
e.returnValue = false;
}
$(this).toggleClass('active');
});
我也尝试过在全局事件对象上设置returnValue,而不是像一篇文章中建议的那样将e 传递到绑定函数中。
我的尝试返回 false:
$('body')
.on('click', '.toggle', function(e){
if (e.preventDefault()) {
e.preventDefault();
}
$(this).toggleClass('active');
return false;
});
尽管有所有这些不同的尝试,IE8 仍采用链接的默认操作并且 不会切换类。我在这里做错了什么?我正在使用 jQuery 1.10.2。
更新:找到问题的根源。谢谢大家的帮助。我有条件地包含了一些非 IE 的脚本元素,这个脚本就是其中之一。返回 false 现在对我有用。非常感谢您将我推向正确的方向!
【问题讨论】:
-
这可能无法解决问题,但无论如何都应该这样做。删除 if 语句中的空括号,使其变为
if (e.preventDefault) { -
你在哪里绑定这个事件?即使您使用委托,
'body'在 DOM 准备好之前也不存在。将其放入$(document).ready(或将其更改为$(document).on(。我将其更改为$(document).on,它在 IE 8 中(在 WinXP 虚拟机中)对我有效。 -
@RocketHazmat - OP 说它适用于所有其他浏览器,这不是问题。
-
@Adam:只是一个想法。 :)
-
@raddevon:是的,应该是一样的。在
<body>结束时,一切都应该准备就绪:-)
标签: javascript jquery internet-explorer internet-explorer-8