jQuery:关于“LI”onclick的问题

时间:2010-07-01 14:26:11

标签: jquery internet-explorer list onclick

我遇到了jquery的问题:点击“li”函数,各种版本的行为都不同......这里是html代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>

<style>
html,body{
 font: 90% arial, tahoma, verdana #333 normal;
 margin:0;
 padding:0;
}
#treeDiv
{
 width:250px;
 background-color:#C4E4EE;
 border:#6BB8DC solid 1px;
 margin:10px;
}
ul#jQtree{
 list-style-type:none;
 margin:10px;
 padding:0;
 background-color:#fff;
}
ul#jQtree li
{
 padding:5px 10px 5px;
 border:#CCC solid 1px;
}
ul#jQtree li label
{
 background-color:#666;
 color:#fff;
}

</style>

<script type="text/javascript">

 $(document).ready(function(){
  //on mouseover of li, change cursor to hand
  $('#jQtree li').hover(function(){ $(this).css({'cursor':'hand'})});

  //on click of li, if there are subnodes for it, hide it.
  $('#jQtree li').click(function(event){
   if(event.target.nodeName == "LI" && $(event.target).children('ul').length > 0){
    $(this).children('ul').slideToggle("200");
   }
  });

 });

</script>
</head>

<body>
<div id="treeDiv">
<ul id="jQtree">
 <li>
     <label>Main Node</label>
        <ul>
         <li><label>Sub Node 1</label></li>
            <li><label>Sub Node 2</label></li>
            <li><label>Sub Node 3</label></li>
            <li><label>Sub Node 4</label></li>
        </ul>
    </li>
</ul>
</div>
</body>
</html>

我只为具有“UL”子项的“LI”编写了jquery onclick函数。 它在ie8中工作,即使在ie7中也是如此,但不同之处在于内部“LI”的onclick仅在ie8中工作,而在ie7中,外部“LI”边缘的onclick也可以工作。最后在ie6中,光标闪烁,有时它变成手,然后你必须点击否则它将无法工作。任何人都可以帮我在所有版本中修复此问题。任何黑客???任何人都会指导我让它发挥作用..

1 个答案:

答案 0 :(得分:0)

你可以使点击方法更具可读性:

$('#jQtree li').click(function(ev) {
    if (this.children('ul').length > 0) {
        this.children('ul').slideToggle(200); // note that I changed the type
    }
}

此外,.hover()两个函数作为参数 - 一个用于鼠标悬停,一个用于mouseout。如果您不想在mouseout上发生任何事情,您应该添加一个空函数,但很可能您想要做的是:

$('#jQtree li').hover(
    function() { this.css('cursor':'pointer'); },
    function() { this.css('cursor':'default'); }
);

作为旁注,您提供的悬停处理程序将在上执行进入和退出,这将始终将光标保持为指针。