如何将唯一的事件侦听器绑定和解除绑定到同一个对象?

时间:2014-03-05 08:39:29

标签: javascript jquery

假设我有以下javascript:

$.each(idArray, function (index, value) {
    $('#'+value).on('mouseenter', function(event) {
        showTooltip();
        $(document).on('click', function (event) {
            if(!$(event.target).is('#'+value)) {
                hideTooltip();
                //remove this listener
            }
        });
    });
});

如果触发每个'click'侦听器,我怎么能删除它?有没有办法唯一地识别它们并从其他地方删除它们?显然,我无法解除对文档元素的“点击”。

2 个答案:

答案 0 :(得分:2)

您可以使用event.namespace

$.each(idArray, function (index, value) {
    $('#' + value).on('mouseenter', function (event) {
        showTooltip();
        $(document).on('click.tooltip', function (event) {
            if (!$(event.target).is('#' + value)) {
                hideTooltip();
                //remove this listener
                $(this).off('click.tooltip');
            }
        });
    });
});

答案 1 :(得分:1)

$(document).on('click', function handlerName(event) {
    if(!$(event.target).is('#'+value)) {
        hideTooltip();
        $(this).off('click', handlerName);
    }
});

在这里,您要为匿名函数指定一个名称,然后使用它来分离处理程序。