IE6中的LI上的click函数有奇怪的行为

时间:2009-09-15 02:34:10

标签: javascript jquery internet-explorer

我在一周前在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上时才会激活警报(除非你转到另一个页面并返回)。

有什么想法吗?谢谢!

1 个答案:

答案 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');
 }