私はフォームを提出したときに、フィールドが空であればidを付けて送信を防ぎ、クラスをフィールドに追加します。jQueryがbeignからフォームを停止しない
何らかの理由で私はそれも働かないようですが、私はフィドルを追加しました、誰かが間違っているところを指摘できますか?
私はフォームを提出したときに、フィールドが空であればidを付けて送信を防ぎ、クラスをフィールドに追加します。jQueryがbeignからフォームを停止しない
何らかの理由で私はそれも働かないようですが、私はフィドルを追加しました、誰かが間違っているところを指摘できますか?
あなたのフィドルにはいくつか問題があります。まず、ready
イベントハンドラを終了していません。第二に、undefined
であるjQueryに$this
を渡しています。代わりにthis
を渡す必要があります。
最後に、実際に送信を停止する必要があるため、フォームは常に送信されます。これを行うには、イベントオブジェクトのpreventDefault
メソッドを呼び出すことができます。
$(document).ready(function(){
$("#form").submit(function(e) {
$('input').each(function() {
if ($(this).val() == '') { //Pass this into jQuery, not $this
$(this).addClass('highlight');
e.preventDefault(); //Stop the form from submitting
}
});
});
});
はまた、それは、
each
ループ内
$(this).val()
を使用する必要がありますのでご注意:ここにあなたのコードの新しいバージョンがあります。
this
はDOM要素への参照になり、その要素には
value
というプロパティがあるため、単に
this.value
を使用すると効率的です。
は、あなたが実際に提出されてからフォームを停止していないので、それはまだ投稿されます(そのため、すぐにハイライトを落とします)。フォームにpreventDefaultメソッドを追加し、エラーを確認した後に手動で送信してください。
preventDefault
を呼び出しているのではなく、this
の代わりに$this
を使用していますが、角かっこは一致しません。バージョンの作業:
$(document).ready(function() {
$("#form").submit(function(e, a) {
$('input, textarea', this).each(function() {
if (!$(this).val()) {
$(this).addClass('highlight');
e.preventDefault();
} else($(this).hasClass('highlight')) ? $(this).removeClass('highlight') : false; // remove class on valid
});
});
});
よりもむしろでpreventDefault()を、提出されたときにフォームを呼び出す関数にfalseを返すことも、提出を防ぐことができます。前の解答では、複数の空のフィールドがあると思って、preventDefault()が不必要に複数回起動されると考えてみましょう。
私はクリーンなソリューションとして、このようなものを使用します。
$(document).ready(function(){
$("#form").submit(function(e) {
var submit=true; //A flag that we'll return
$('input').each(function() {
if ($(this).val() == '') {
$(this).addClass('highlight');
submit=false //Setting the flag to false will prevent form to be submitted
}
});
return submit;
});
});