jQueryを使用してフォーム変数を送信していますが、フォームが通常の方法で送信されないようにしようとしています(送信ボタンをクリックするか、フィールドの1つでEnterキーを押します)
私はこれを持っています:
$('#form').submit(function(){
event.preventDefault();
});
しかし、それはうまくいかないようです。私のフォームはまだ送信中で、process.phpページに移動しています。
デフォルトのアクションを防ぐことだけが必要な場合はfalse
、関数の代わりに次のように指定できます。
$('#form').submit(false);
return false
関数の代わりに試すか、パラメーターとしてevent.preventDefault()
受け入れてください。event
$('#form').submit(function(event){
event.preventDefault();
});
一部の人々がこれがもはや機能しないと考える理由はわかりませんが、これはまだ機能していることを示す例です。
https://jsfiddle.net/138z5atq/
イベントハンドラーをコメントアウトすると、アラートが表示されます。
に関してstopPropagation()
、stopImmediatePropagation()
彼らはフォームの提出をまったく妨げません。それらは、イベントがdomを泡立たせるのを防ぐだけです。
他の方法は次のとおりです。
$('#form').submit(function(){
//some code here
return false;
});
投稿された回答を機能させることができず、falseを指定するだけでは選択肢がありませんでした。私はこれが機能することを発見しました:
$(document).on('submit', '#form', function(event){
event.preventDefault();
});
また、(少なくともChromeでは)Promiseまたは次のような非同期関数の後にe.preventDefault()を実行すると、次のようになります。
submitEvent(e) {
this.sendData(formData).then((json) => {
...
})
.catch((error) => {
...
});
e.preventDefault(); // OPS. Executed but not working ????!!!
}
この以前は機能しません。理想的には、次のような他のコードの前に宣言する必要があります。
submitEvent(e) {
e.preventDefault(); // WORKING !! :-)
this.sendData(formData).then((json) => {
...
})
.catch((error) => {
...
});
}
steveukxの答えを拡張するために、私は通常、次のようなことをするのが好きです。
$('#form').submit(function(event){
// The method's values go here
event.preventDefault();
}, false); // This is a boolean (It converts all the values contained in the callback to a boolean value)