1

私は解決策を見つけようとして(または1つをつなぎ合わせて)SOを精査しましたが、ジレンマに対する決定的な答えを見つけることができません.

私がやろうとしていることは次のとおりです。

$("#mini_search_input").keypress(function(event){

    var keycode = (event.keyCode ? event.keyCode : event.which);
    if(keycode == '13'){
        alert('my event!!');    
    }

});

さて、このスニペットは、要素が で DOM に入るとうまく機能しますdisplay:block;。ただし、で開始してからdisplay:none;a を使用し.show()て表示すると、keypress機能が停止します。Chrome と Firefox の両方でこれをテストしました。

要素を非表示として開始した場合、そのキープレスが要素にバインドされない理由 (コンソールエラーは発生しません。単に「起動」しません) について、私が見逃しているものはありますか?

4

2 に答える 2

1

要素を非表示にして表示するだけではない可能性が高くなります。なぜなら、要素が後でdisplay:none作成されたとしても、要素がDOMに存在する場合、イベントが発生するからです。display:block

おそらく、その要素を動的に設定しています。その場合、 .on()を使用してイベント委任を使用します

$(document).on('keypress', '#mini_search_input', function(event){
    //Your code
});
于 2013-10-30T15:45:21.373 に答える
1

.on() を試す

要素は動的に追加されるため、イベントをそれらに直接バインドすることはできません。そのため、 Event Delegationを使用する必要があります。

$(document).on('keypress', '#mini_search_input', function (event) {
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == '13') {
        alert('my event!!');
    }
});

構文

$( elements ).on( events, selector, data, handler );
于 2013-10-30T15:45:22.723 に答える