如何确保点击处理程序只注册一次?

时间:2012-09-18 02:56:36

标签: javascript jquery

我有这段代码:

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

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

}

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

2 个答案:

答案 0 :(得分:4)

一些事情:

1:您不应该使用live(),而是deprecated

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替换为您选择的与相关处理程序相关的内容。这样,它会删除它可能附加的任何现有处理程序,然后使用可能存在的新选项without impacting any other handlers重新添加处理程序。

答案 1 :(得分:0)

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