特定のフィールドにフォーカスせずに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;
}
});
どちらを適用するのが最適かを知るために、知りたいだけです。
どうもありがとう。