Jquery 阻止将.hover()多次绑定到同一元素
此问题的标题反映了最终目标,即防止Jquery 阻止将.hover()多次绑定到同一元素,jquery,Jquery,此问题的标题反映了最终目标,即防止.hover()多次绑定到同一元素 在提问之前,我对SO进行了搜索,发现了一个已经回答过的问题: 我也在谷歌上搜索了很多关于这个问题的信息,看起来这个问题的答案是正确的 有了这些,我想出了一小段代码,尝试执行以下操作: 使用类类名在所有元素上循环 获取该元素上的所有事件 检查.hover()事件是否已绑定到它 如果不是,则添加它 $(文档).ready(函数(){ $('.class name')。每个(函数(){ 变量事件=$。_数据($(this)[0],
.hover()
多次绑定到同一元素
在提问之前,我对SO进行了搜索,发现了一个已经回答过的问题:
我也在谷歌上搜索了很多关于这个问题的信息,看起来这个问题的答案是正确的
有了这些,我想出了一小段代码,尝试执行以下操作:
类名在所有元素上循环
.hover()
事件是否已绑定到它$(文档).ready(函数(){
$('.class name')。每个(函数(){
变量事件=$。_数据($(this)[0],'events');
if(!(事件['mouseover']和&events['mouseout'])){
$(此)。悬停(
函数(){alert('IN');},
函数(){alert('OUT');}
);
}
});
});代码>
a
在if
语句中检查事件之前,您忘记将事件绑定到
元素
$(文档).ready(函数()
{
$('.class name')。每个(函数()
{
var事件=$(此);
//首先设置事件
事件。关于(“鼠标悬停”,鼠标悬停);
事件。关于(“mouseout”,mouseout);
if((事件['mouseover']和&events['mouseout'])){
log(“绑定到标记的两个事件”);
}
//在控制台中输出所有事件处理程序
log('事件处理程序:',$。_数据(事件[0],“事件”);
});
});
var mouseover=function(){console.log('IN');};
var mouseout=function(){console.log('OUT');}代码>
我发现了问题
开始时,没有任何事件绑定到元素,因此$。\u data($(this)[0],“events”)
是未定义的。因此,事件
变量也是未定义的
if
子句需要遵循以下逻辑:
if ( (no events at all) OR (mousever and mouseout events don't exist) )
下面是固定代码段:
$(文档).ready(函数(){
$('.class name')。每个(函数(){
变量事件=$。_数据($(this)[0],'events');
if(事件的类型)==“未定义”| |!(事件['mouseover']和&events['mouseout'])){
$(此)。悬停(
函数(){alert('IN');},
函数(){alert('OUT');}
);
}
});
});代码>
a
我发现更容易检查类的存在性——当我添加原始的hover时,检查是否存在“hover set”类或类似的类。如果没有,请添加我的侦听器并添加类。在调试过程中也会有帮助,因为很容易看到哪些类设置了悬停。首先添加事件,然后进行检查不是这个问题的重点。您需要能够在不知道事件是否已绑定的情况下进行检查。