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”类或类似的类。如果没有,请添加我的侦听器并添加类。在调试过程中也会有帮助,因为很容易看到哪些类设置了悬停。首先添加事件,然后进行检查不是这个问题的重点。您需要能够在不知道事件是否已绑定的情况下进行检查。