我在一周前在link text问了一个类似的问题,这个问题得到了解决,但仅限于IE7。我仍然有IE6的问题。
基本上我有一个左导航菜单,我希望以“手风琴”的方式工作。菜单由UL和LI组成,我希望能够点击LI打开它下面的子菜单。
我之前在上一篇文章中展示了代码,但这里又是:
<div class="page-body-left" id="leftmenu">
<ul>
<li class="expandable" style="background-color: rgb(214, 232, 255);"><a class="createlink" href="link1">link1</a>
<ul style="display: none;">
<li><a class="createlink" href="link1a">link1a</a></li>
<li class="last"><a class="createlink" href="link1b">link1b</a></li>
</ul>
</li>
<li><a class="createlink" href="link2">link2</a></li>
<li class="expandable lastExpandable" style="background-color: rgb(214, 232, 255);"><a title="link3" href="link3">link3</a>
<ul style="display: none;">
<li><a class="createlink" href="link3a">link3a</a></li>
<li class="last"><a title="link3b" href="link3b">link3b</a></li>
</ul>
</li>
</ul></div>
我的Javascript让它在IE7和FF3中运行是:
jQuery('#leftmenu .expandable').css('background-color','#D6E8FF');
jQuery('#leftmenu .expandable').click(function () {
alert("Clicked!");
jQuery(this).children('ul').slideToggle('fast');
});
第一行看起来不相关但它必须在那里,否则在IE7中不起作用(我有点放弃问为什么?)。
因此,IE6中的行为是没有抛出错误,除非您实际点击链接,否则警报永远不会被激活,因此点击功能似乎已在LI内的锚标签上绑定,而不是LI本身。但是,如果您离开页面然后返回浏览器,则可以通过单击LI,警报和所有菜单来操作菜单。
这种行为对我来说是不合逻辑的,所以我希望对于经验丰富的人来说这听起来很熟悉。我也尝试用普通的Javascript而不是jQuery做同样的结果。我试图使用“onmouseout”并且它是相同的 - 仅当悬停在锚点而不是LI上时才会激活警报(除非你转到另一个页面并返回)。
有什么想法吗?谢谢!
答案 0 :(得分:1)
没有IE 6的好处,这是一个随机的建议:
尝试将展开式广告的显示类型更改为display: block
。也许IE6只注册块级元素的点击,而不是列表项。
我会继续研究。
好吧,我终于放弃了对IE6的搜索,只是搜索了Google。我很高兴我做到了,因为我从未想过这个。
我不确定修复是什么,因为我不确定在给浏览器提供最终代码之前有多少jquery变形,但是,我在quirksmode上找到了一个特别提到的页面IE6只会执行像表达式一样设置的onclick
个事件。换句话说:
mydiv.onclick.color = "red";
无效,但
function changecolor(e) {
e.color = "red";
}
mydiv.onclick = changecolor;
会奏效。而且,我只是做了一个非常快速的读取,显然一个元素只能有一个事件处理程序。设置两个只会使第二个工作,第一个是覆盖。
所以在你的情况下,试试这三个中的一个并告诉我哪些有用,如果有的话:
$('#leftmenu .expandable').click(expand(e));
function expand(e) {
$(e).children('ul').slideToggle('fast');
}
////////////////
$('#leftmenu .expandable').bind("click", expand(e));
function expand(e) {
$(e).children('ul').slideToggle('fast');
}
////////////////
// Worst case scenario:
$('#leftmenu .expandable').onclick = expand;
function expand(e) {
$(e).children('ul').slideToggle('fast');
}