form
2つのテキストボックスがあり、1つは選択ドロップダウン、もう1つはラジオボタンです。enterキーを押すとJavaScript関数を呼び出したいのですが、押すと送信form
されます。
キーが押されform
たときにが送信されないようにするにはどうすればよいですか?enter
form
2つのテキストボックスがあり、1つは選択ドロップダウン、もう1つはラジオボタンです。enterキーを押すとJavaScript関数を呼び出したいのですが、押すと送信form
されます。
キーが押されform
たときにが送信されないようにするにはどうすればよいですか?enter
if(characterCode == 13)
{
return false; // returning false will prevent the event from bubbling up.
}
else
{
return true;
}
では、フォームに次のテキストボックスがあると想像してください。
<input id="scriptBox" type="text" onkeypress="return runScript(event)" />
エンターキーが押されたときにこのテキストボックスから「ユーザー定義」スクリプトを実行し、フォームを送信しないようにするために、サンプルコードを次に示します。この関数はエラーチェックを行わず、ほとんどの場合IEでのみ機能することに注意してください。これを正しく行うには、より堅牢なソリューションが必要ですが、一般的な考え方がわかります。
function runScript(e) {
//See notes about 'which' and 'key'
if (e.keyCode == 13) {
var tb = document.getElementById("scriptBox");
eval(tb.value);
return false;
}
}
関数の値を返すと、イベントハンドラーにイベントをバブルしないように警告し、keypressイベントがそれ以上処理されないようにします。
現在非推奨keyCode
になっていることが指摘されています。次善の代替案も非推奨になりました。which
残念ながら、key
最近のブラウザで広くサポートされている人気のある標準は、IEとEdgeでいくつかの危険な動作をします。IE11より古いものは、ポリフィルが必要です。
さらに、非推奨の警告はとについてはかなり不吉ですが、それらを削除するkeyCode
とwhich
、膨大な数のレガシーWebサイトに大きな打撃を与えることになります。そのため、彼らがすぐにどこかに行くことはありそうにありません。
との両方event.which
を使用しevent.keyCode
ます。
function (event) {
if (event.which == 13 || event.keyCode == 13) {
//code to execute here
return false;
}
return true;
};
jQuery を使用している場合:
$('input[type=text]').on('keydown', function(e) {
if (e.which == 13) {
e.preventDefault();
}
});
フォームのアクションをオーバーライドonsubmit
して関数の呼び出しにし、その後にreturn falseを追加します。つまり、次のようになります。
<form onsubmit="javascript:myfunc();return false;" >
ENTER
以下のコードは、ページ全体にキーのリスナーを追加します。
これは、ログイン、登録、送信などのアクション ボタンが 1 つの画面で非常に便利です。
<head>
<!--Import jQuery IMPORTANT -->
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<!--Listen to Enter key event-->
<script type="text/javascript">
$(document).keypress(function (e) {
if (e.which == 13 || event.keyCode == 13) {
alert('enter key is pressed');
}
});
</script>
</head>
すべてのブラウザでテスト済み。
私の観点から見ると、はるかにシンプルで効果的な方法は次のとおりです。
function onPress_ENTER()
{
var keyPressed = event.keyCode || event.which;
//if ENTER is pressed
if(keyPressed==13)
{
alert('enter pressed');
keyPressed=null;
}
else
{
return false;
}
}
jQuery ソリューション。
テキスト入力のぼかしイベントが発生するまで、フォームの送信を遅らせる方法を探してここに来ました。
$(selector).keyup(function(e){
/*
* Delay the enter key form submit till after the hidden
* input is updated.
*/
// No need to do anything if it's not the enter key
// Also only e.which is needed as this is the jQuery event object.
if (e.which !== 13) {
return;
}
// Prevent form submit
e.preventDefault();
// Trigger the blur event.
this.blur();
// Submit the form.
$(e.target).closest('form').submit();
});
フォームの送信だけでなく、すべての遅延イベントを発生させた、より一般的なバージョンを取得するとよいでしょう。