1

キーを押すか、特定の要素をクリックすると消えるページの紹介があります。両方のイベントに同じ関数を使用しますが、ページが大幅に変更されているため、どちらの方法でトリガーされたかに関係なく、イベントは 1 回だけ発生します。

私の機能:

function start() {
    $('.intro').remove();
    $('.something-else').show();
}

イベントをバインドする方法:

$('body').keypress(start);
$('.intro').click(start);

出来事が同じなら、私は言うことができます

$('body, .intro').one('click', start);

両方のイベントが同じ要素に発生した場合、次のように言えます。

$('.intro').one('click keypress', start);

両方を組み合わせる方法: 異なる要素と異なるイベントを持ち、関数を一度だけ呼び出す必要がありますか?

4

3 に答える 3

1

最も簡単な解決策は、関数が呼び出されたかどうかを保存することです。

var started = false;
function start() {
    if(started) return;

    $('.intro').remove();
    $('.something-else').show();

    started = true;
}

その後、関数は 1 回しか呼び出せず、他のすべての呼び出しは無視されます。

于 2013-06-23T23:02:49.143 に答える
0

この解決策は明示的なアプローチとしてはきれいではないと思いますが、 と の組み合わせを使用して行われ.one()ます.trigger()。バインドされた項目の 1 つを呼び出すため$(".intro").remove()、イベント ハンドラーは暗黙的にバインド解除されます。サンプルフィドル

fiddle で見られる html を除くと、これがコードです。

// Your event handler
function start() {
    $("#intro").remove();
    $("#main").show();
    console.log("start handler called");
}

// Handle the keypress event
$("body").one( "keypress", start );

// Allow user to click through the intro, but trigger the keypress handler on the body which is a one-time event handler)
$("#intro").one( "click", function () { $("body").trigger( "keypress" ); });
于 2013-06-24T00:29:25.527 に答える
0

2行のコードを使用して完了;)

$('body').one('keypress', start);
$('.intro').one('click', start);

編集: 後で予期せず実行されないように、他のコールバックを手動でアンバインドする必要があります。

于 2013-06-23T23:05:46.733 に答える