问题描述
|
我的问题是如何将被“ mouSEOver \”事件检测到的优先级赋予子元素而不是其父元素?
这是jQuery代码:
<script>
$(function() {
$(\"li\").mouSEOver(function(event){
$(\'#log\').html($(this).text());
});
});
</script>
这是HTML代码
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3
<ul>
<li>item 3.1</li>
<li>item 3.2</li>
<li>item 3.3</li>
</ul>
</li>
<li>item 4</li>
</ul>
<div id=\"log\">log</div>
鼠标悬停时如何输出当前元素?
问题是当您将鼠标悬停在\“ item 3.1 \”上时,jQuery不会检测到\“项目3.1 \”,而是jquery将假定您将鼠标悬停在\“ item 3 \”吗?
谢谢
解决方法
您想要事件目标:
$(\"li\").mouseover(function(event) {
$(\'#log\').html($(event.target).text());
});
从quirksmode(上面链接):
即使捕获到事件或
起泡,目标/ srcElement
始终是事件的要素
发生了。
演示在这里。
,在文本周围的每个li
内添加一个span
,并检查是否有鼠标悬停在该文本上
<script>
$(function() {
$(\"li span\").mouseover(function(event){
$(\'#log\').html($(this).text());
});
});
</script>
<ul>
<li><span>item 1</span></li>
<li><span>item 2</span></li>
<li><span>item 3</span>
<ul>
<li><span>item 3.1</span></li>
<li><span>item 3.2</span></li>
<li><span>item 3.3</span></li>
</ul>
</li>
<li><span>item 4</span></li>
</ul>
<div id=\"log\">log</div>
,这是Karim79方法的替代方法。
$(\"li\").mouseover(function(event){
$(\'#log\').html($(this).text());
event.stopPropagation();
});
确保阅读stopPropagation()的实际作用。
http://jsbin.com/afunu3
,您应该选择内部\'li \'标记而不是所有\'li \'标记。
例如,您可以在内部\'li \'中添加一个class=\'innerItem\"
,如下所示:
<li class=\'innerItem\'>item 3.1</li>
然后您的jQuery应该看起来像这样:
<script>
$(function() {
$(\"li.innerItem\").mouseover(function(event){
$(\'#log\').html($(this).text());
});
});
</script>