0

私はこのコードを持っています:

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

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

}

このコードが1回以上呼び出されても、同じhypIdがクリックイベントに登録されている限り、何も実行されないことを確認したいと思います。それ、どうやったら出来るの?

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 に答える