19

特定のフィールドにフォーカスせずにEnterキー(実際には任意のキー)を押すと、キーダウンイベントがトリガーされず、キープレスイベントのみがトリガーされるというFirefoxのキーダウン動作に不満を感じました。

keydownおよびkeyupイベントはJavaScriptキーコードを使用するのに対し、keypressはASCIIコードを使用するため、これは非常に混乱する可能性があります。幸いなことに、13(入力/戻り)は両方に共通です。

この状況でFFがキープレスを使用する既知の理由はありますか?メリットは何ですか?

これが確立されると、IE8はpreventDefaultの要求を許可しないという点で愚かなことを投げかけました。代わりにreturnValue = false、別のSO投稿からの次のスニペットが非常に役立つことが証明されました。

event.preventDefault ? event.preventDefault() : event.returnValue = false;

event.keycodeこれらの問題を解決するための検索中に、私は一貫してvsによって混乱してきましたevent.which。つまり、次のようなswitchステートメントを使用して間違ったことをしていますか?

$("#class_Name").bind("keydown", function(event){
    // do not test input if field controls used
    switch(event.which){
       case 13:
       //enter key 
       event.preventDefault ? event.preventDefault() : event.returnValue = false;
       break;
     }


次の方が良いのですが、もしそうなら、なぜですか?

$("body").keypress(function(event){
     // stop inadvertant form submission
     if (event.keycode == "13"){
       event.preventDefault ? event.preventDefault() : event.returnValue = false;
     }
});


どちらを適用するのが最適かを知るために、知りたいだけです。

どうもありがとう。

4

2 に答える 2

10

を使用するブラウザもあれば、使用するブラウザもkeyCodeありますwhich。しかし、jQuery ではこれが正規化されるため、そのことを考える必要はありません。お好きな方をお選びいただけます。

于 2012-08-29T07:20:08.893 に答える
9

このコメントによると、 jQuery は信頼できない可能性があり、このページには次のように記載されています。

event.whichkeydownおよびの IE<9 では未定義keyupです。

event.keyCodekeypress文字を返すキーの場合、Gecko (Seamonkey、Firefox) では 0です。

event.charCodeInternet Explorer (Mac) による keydown と keyup でのみサポートされます。

JSFiddleで試してみてください

于 2014-02-11T12:13:33.197 に答える