原型悬停内容和儿童

时间:2010-10-29 18:54:38

标签: javascript ruby-on-rails prototypejs

我正在使用:

    Event.observe(window, 'load', function() {  
$$('li').invoke('observe', 'mouseover', function(event) {
    this.children[0].toggle();
});

$$('li').invoke('observe', 'mouseout', function(event) {
    document.children[0].toggle();
});
    });   

<ul>
  <li>
    <div style="display:hidden;">Hidden Div</div>
    <div>More content that isn't hidden</div>
  </li>
</ul>

当元素被鼠标悬停时,在元素中显示隐藏的div。它部分工作,但我的代码如下所示:

当我翻转li时,它显示隐藏的div,但是如果我翻转第二个div,它会再次隐藏评论,即使这个div在li中。为什么?我发现了this个问题,但它似乎对这种情况无效。

3 个答案:

答案 0 :(得分:3)

不需要使用原型或javascript,使用css

li.item:hover div.entry {
 display:block
}

li.item div.entry {
 display:none
}

你不要在你的示例代码中使用任何css类,但我强烈建议你这样做

<ul>
  <li class="item">
    <div class="entry">Hidden Div</div>
    <div>More content that isn't hidden</div>
  </li>
</ul>

答案 1 :(得分:1)

将一个类添加到要执行切换的div。然后在事件处理程序内部使用this.select()查找具有该类名的子项。

 <ul>
  <li>
    <div class="hidden">Hidden Div</div>
    <div>More content that isn't hidden</div>
  </li>
</ul>

Event.observe(window, 'load', function() {  
    var lis = $$('li');

    var toggleFunc = function(event) {
        this.select('.hidden').toggle();
    }

    lis.observe('mouseover', toggleFunc);
    lis.observe('mouseout', toggleFunc);
});

答案 2 :(得分:0)

快速解决方案是使用this plugin为非IE浏览器添加“mouseEnter”和“mouseLeave”功能。