【发布时间】:2017-11-02 16:25:29
【问题描述】:
此问题的标题反映了最终目标,即防止.hover() 多次绑定到同一个元素。
在询问之前,我对 SO 进行了搜索,发现这个问题已经得到解答:Checking if jQuery .hover action is already binded
我也用谷歌搜索了很多关于这个问题的答案,看起来这个问题的公认答案是正确的。
因此,我想出了一小段代码,它尝试执行以下操作:
- 循环使用类
class-name的所有元素 - 获取该元素上的所有事件
- 检查
.hover()事件是否已经绑定在它上面 - 如果不是,则添加它。
$(document).ready(function() {
$('.class-name').each(function() {
var events = $._data($(this)[0], 'events');
if ( !(events['mouseover'] && events['mouseout']) ) {
$(this).hover(
function() { alert('IN'); },
function() { alert('OUT'); }
);
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<a class="class-name">a</a>
上面的代码不起作用,我不知道错误在哪里。根据 JS 控制台输出,events 变量为undefined。
任何帮助表示赞赏。谢谢。
【问题讨论】:
-
我发现检查一个类的存在更容易——当我添加原始悬停时,检查“hover-set”类或类似的存在。如果不存在,请添加我的侦听器并添加类。在调试过程中也有帮助,因为很容易查看哪些类设置了悬停。
标签: jquery