0

ユーザーが の任意の場所で Enter キーを押すと、body別の要素でクリック イベントがトリガーされ、基本的なアラート ポップアップが開きます (テスト目的)。

Enter キーをもう一度押すとアラートが閉じますが、イベントが再びトリガーされて新しいアラートが開き、サイクルが繰り返されるため、これによりループが作成されます。


これをモーダルボックススクリプトで使用しています。モーダル ボックスが表示されたら、ユーザーは Enter キーを押して、モーダル ボックスを閉じる (または私の場合はアラート ポップアップを開く) など、モーダル ボックス内のボタンが実行するアクションを実行できます。

クリックコード:

//Add click events...
button.bind('click', mybtn, function(e) {
    var click;

    if (e.data.onclick) {
        e.data.onclick(e);
    } else if (e.data.click) {
        e.data.click(e);
    }
});

キーコード:

//Add key events...
$('body').keyup(mybtn, function(e) {
    var keyCode = e.keyCode || e.which;

    //What key we need to match...
    switch (e.data.key) {
        case 'enter':
            if (keyCode == 13)          e.data.button.trigger('click');
            break;

        case 'esc':
        case 'escape':
            if (keyCode == 27)          e.data.button.trigger('click');
            break;
    }
});

イベントを別の場所 (要素) にバインドする必要がありますか? このループを止めるためにバインドするより良い方法はありますか?

スクリプトは複数のキーの押下を処理できる柔軟性を備えている必要があるため、キー イベントのバインドを解除できません。


モーダル ボックスの作成例:

createModal('HTML <b>content</b>', [{ label: 'Close', onclick: function() { alert('Modal closed'); }, key: 'enter' }]);

HTML コンテンツがモーダルにダンプされると、関数は定義したコントロールをループし、それらを構築しようとします。この例では、「閉じる」コントロールを次のように定義します ( を使用した場合onclick=""):

<button onclick="function() { alert('Modal closed'); }">Close</button>

Enterキーを押すとそのボタンのクリックがトリガーされ、問題が発生するドキュメントにイベントが割り当てられています。

4

1 に答える 1

1
button.one('click', mybtn, function(e) {
    var click;

    if (e.data.onclick) {
        e.data.onclick(e);
    } else if (e.data.click) {
        e.data.click(e);
    }
});

クリック イベントを 1 回だけに制限してから、バインドを解除します。

于 2013-07-12T02:19:02.283 に答える