jquery - jquery中删除事件的die函数

标签 jquery

我创建了一个 mouseover 事件处理程序,如下所示:

$('.grpName_tooltip0, .grpName_tooltip1, .grpName_tooltip2').live('mouseover',function(){
    var localGrpName=$(this).attr('class')=='grpName_tooltip0'?arrGrpNames[0]:$(this).attr('class')=='grpName_tooltip1'?arrGrpNames[1]:$(this).attr('class')=='grpName_tooltip2'?arrGrpNames[2]:'';
    $('#GroupsDivTooltip').html(localGrpName);
    $('.ttpGrp').css({'top':$(this).offset().top+27,'left':$(this).offset().left}).fadeIn();
}).live('mouseleave',function(){
    $('#GroupsDivTooltip').html('');
    $('.ttpGrp').fadeOut();
});

我想为特定的 .grpName_tooltip0 类名执行 .die。

当我像下面这样单独尝试时不起作用......

$('.grpName_tooltip0').die('mouseover');

它适用于所有提到的......如下所示

$('.grpName_tooltip0, .grpName_tooltip1, .grpName_tooltip2').die('mouseover');

我只想一个。

请推荐我......

最佳答案

首先:自 jQuery 1.7 起,.live().die() 已被弃用。您应该使用 .on()现在(但出现了同样的问题,所以这里的所有解决方案仍然有效)。

<小时/>

如果您不必使用事件委托(delegate),则只需取消绑定(bind)事件处理程序 like @Raminson showed .

如果必须使用事件委托(delegate),一种方法是直接向元素添加额外的事件处理程序,这可以防止事件在 DOM 中冒泡并触发根 ( like @Farhad showed ) 处的事件处理程序。

另一种解决方法可能是在元素上设置一个标志,并且仅在该标志不是时才执行事件处理程序,例如 false:

$('.grpName_tooltip0, .grpName_tooltip1, .grpName_tooltip2').live('mouseover',function(){
    if($(this).data('active') !== false) {
        // do something
    }
});

然后,您可以通过设置启用和禁用元素的事件处理程序

$('.grpName_tooltip0').data('active', false); // or true
<小时/>

所有上述方法都有一个缺点,即为了防止事件处理程序触发,该元素在您做出决定时必须存在。但您的情况可能并非如此。

因此,另一种方法可能是保留要从事件处理程序中排除的选择器列表:

var exclude = [];

$('.grpName_tooltip0, .grpName_tooltip1, .grpName_tooltip2').live('mouseover',function(){
    var run = true, $self = $(this);
    $.each(exclude, function(sel) {
        if($self.is(sel)) {
            run = false;
            return false;
        }
    });

    if(run) {
        // do stuff
    }
});

然后您所要做的就是将您不希望处理程序触发的选择器添加到列表中:

exclude.push('.grpName_tooltip0');

这种方法可以通过多种方式进行优化(例如,使用对象而不是数组进行 O(1) 访问),具体取决于您的实际情况。

另一种方法是完全解除事件处理程序的绑定(bind),只为您想要的元素重新绑定(bind)它:

function handler() {
    // your event handler code here
}

var selectors = ['.grpName_tooltip0', '.grpName_tooltip1', '.grpName_tooltip2'];

$(selectors.join()).live('mouseover', handler);

稍后:

$(selectors.join()).die('mouseover');
$($.grep(selectors, function(sel) {
    return sel !==  '.grpName_tooltip0';
}).join()).live('mouseover', handler);

关于jquery - jquery中删除事件的die函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383388/

相关文章:

jquery - 获取字符串的值;在内容中找到这个字符串;感谢 jQuery 将新样式应用于此字符串

jquery - 使用 Jquery 过滤具有两个或多个属性的 div

javascript - Internet Explorer 不保存打开文件对话框中的路径

javascript - 如何使用从 API 获取的图像在 div 上生成动态轮播

javascript - 使用响应式链接菜单时如何使用两行(换行)停止 Bootstrap 导航栏

javascript - 如何使用ajax php刷新div标签内的表格

javascript - 如何在工具栏之外使用免费的 jqgrid 搜索和查看工具栏按钮

javascript - .Focus() 无法在 JQUERY MOBILE 中使用 jquery 或 javascript

javascript - 如何使用 jQuery 在按钮按下时在文本区域中向上、向下、向左、向右移动光标?

javascript - 在页面加载时将特定样式设置为 LI 元素