0

I have this piece of code:

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

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

}

I want to make sure that no matter if this code is called for >1 time, it shouldn't do anything as long as the same hypId is being registered for click event. How do I do that?

4

2 回答 2

4

几件事:

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为您选择的与相关处理程序相关的内容。这样,它将在使用新选项重新添加处理程序之前删除它可能已附加的任何现有处理程序,而不会影响可能存在的任何其他处理程序。

于 2012-09-18T03:05:08.860 回答
0
$('#' + hypId).one('click', handler);
于 2012-09-18T03:26:42.780 回答