如何停止mouseout事件在列表中的传播
How to stop propagation of mouseout event in a list?
当我将mouseout
事件附加到UL
元素时,尽管我添加了stopPropagation()
,事件是否会传播到LI
子级?我的代码出了什么问题?
http://jsfiddle.net/ubugnu/D7jwq/270/
HTML代码:
<ul id="myul">
<li>Outer
<ul>
<li>Inner
<ul>
<li>Inner Inner</li>
</ul>
</li>
</ul>
</li>
</ul>
<span id="count">0</span>
JS代码:
document.getElementById('myul').addEventListener('mouseout', function(e){
e.stopPropagation();
document.getElementById('count').innerHTML = parseInt(document.getElementById('count').innerHTML) + 1;
}, false);
CSS代码:
li { padding: 20px; border: solid 1px #ddd; }
在这种情况下,请使用"mouseleave"而不是"mouseout"。引用文档:
鼠标离开事件在指向设备(通常是鼠标)时触发从附加了侦听器的元素中移出。
鼠标输出事件在指向设备(通常是鼠标)时触发被移离具有侦听器的元素或移离其子级。
请注意,最近在Blink(Chrome/Opera 15)中添加了对mouseleave
的支持,这就是为什么它在Chrome 29中不可用(但在dev Chrome中已经存在)。
尽管@raina77ow所说的mouseleave
是实现这一点的正确方法,但如果您正在寻找更广泛的浏览器兼容性,添加此代码应该有效:
var ds=document.getElementById('myul').getElementsByTagName('*');
for(var l=0;l<ds.length;l++){
ds[l].addEventListener('mouseout',function(e){e.stopPropagation()},true);
}
未经测试的
相关文章:
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何使用jQuery选择下拉列表的值
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- 如何使用json将对象列表从java转换为javascript
- 区分JSON中的矩阵和列表列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 接受不在列表中的值-引导组合框
- 禁用jQuery中的下拉列表
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 如何在javascript中迭代数字列表
- 如何在按钮中显示下拉列表中选定的元素
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- Twitter引导程序在下拉列表打开时停止传播
- 如何停止mouseout事件在列表中的传播
- 使用ng-repeat来传播包含另一个ng-repeat列表的列表