如何确保单击处理程序仅注册一次



我有这段代码:

function expandCollapse(hypId, ElemId, ShowText, HideText) {
    var handler = function () {
        $("#" + ElemId).toggle();
        toggle(hypId, ElemId, ShowText, HideText);
    }
    $('#' + hypId).live('click', handler);
}

我想确保无论是否调用此代码>1 次,只要为点击事件注册了相同的 hypId,它就不应该做任何事情。我该怎么做?

几件事:

1:你不应该使用live(),它已被弃用。

2:处理这种情况的最简单方法(如果在进行展开/折叠时元素在附近)是使用命名空间。所以像这样:

function expandCollapse(hypId, ElemId, ShowText, HideText) {
    var handler = function () {
        $("#" + ElemId).toggle();
        toggle(hypId, ElemId, ShowText, HideText);
    }
    $('#' + hypId).off('click.mynamespace').on('click.mynamespace', handler);
}

mynamespace替换为您选择的与相关处理程序相关的内容。这样,它将删除它可能已附加的任何现有处理程序,然后再使用新选项重新添加处理程序,而不会影响可能存在的任何其他处理程序。

$('#' + hypId).one('click', handler);

最新更新