私はこれに対する解決策を探していましたが、私のために働く例を見つけることができないようです。ここに私がこれまでに得たものがあります:
$("#register-form").submit(function(){
if($(".required input").val() == '') {
alert("Please fill in all the required fields (indicated by *)");
$(".required").addClass('highlight');
// $('input[type=submit]', this).attr('disabled', 'disabled');
return false;
}
});
何らかの理由で、必須フィールドに何も入力せずにフォームを送信すると(2つあります)、動作しますが、そのうちの1つに入力しても動作しません。
なぜアイデアがありますか?
ありがとう
大須
コードの問題は、必要に応じてフラグを立てた最初のフィールドのみをテストしていることです。 $(".required input")
は、そのセレクタに一致するフォームの最初の入力のみを返します。
これにより、必要に応じてフラグが設定されたフォームのすべての入力がループされます(セレクターによる)。値が ''であるものが見つかった場合、送信関数がfalseを返すように設定し、空のフィールドを強調表示します。また、現在有効であるが、以前のフォーム送信試行で以前は無効だったフィールドからハイライトクラスを削除します。
$("#register-form").submit(function(){
var isFormValid = true;
$(".required input").each(function(){
if ($.trim($(this).val()).length == 0){
$(this).addClass("highlight");
isFormValid = false;
}
else{
$(this).removeClass("highlight");
}
});
if (!isFormValid) alert("Please fill in all the required fields (indicated by *)");
return isFormValid;
});
$("#register-form").submit(function() {
$('.required input').each(function() {
if ($($this).val() == '') {
$(this).addClass('highlight');
}
});
if ($('.required input').hasClass('highlight')) {
alert("Please fill in all the required fields (indicated by *)");
return false;
}
}
それを試してみてください。
編集アラートを移動して、ユーザーがアラートメッセージで顔を吹き飛ばさないようにしました。
簡単な解決策!:
function checkForm(){
$("input.required").css("border","1px solid #AFAFAF");
$("input.required[value=]").css("border-color","red");
if($("input.required").val().length<2)return false;
return true;
}
たぶんあなたの状態はこれになるはずです:
if($("input.required").val() == '')... //Pay attention to the selector
セレクタがすべての入力を見つけていたためchildren of .required
David Fellの答えに基づいて(私の意見ではエラーがあります)、これを行うことができます:
$("#register-form").submit(function() {
$('.required input').each(function() {
if ($(this).val() == '') {
$(this).addClass('highlight');
}
});
if ($('.required input.highlight').size() > 0) {
alert("Please fill in all the required fields (indicated by *)");
return false;
}
}
このコードは、選択リストとチェックボックスなどですべてのフォームフィールドを取得します.
var save_prms = $("form").serializeArray();
$(save_prms).each(function( index, element ) {
alert(element.name);
alert(element.val);
});
もし
$(".required input")
複数の要素に一致している場合、
$(".required input").val() == ''
おそらくあなたが期待していることをしないでしょう。
そのようなすべてのフォーム入力の値を参照することはできません。
var valid = true;
$('.required input').each(function(){
if( $(this).val() == '' ){
valid = false;
$(this).addClass('highlight');
}
});
フォームプラグイン は、これを自動的に行います。
入力の名前またはこの場合はid、入力のid
HTML:
<input type="text" id="id"... />
JQUERY:
if (!$("#id").val()) {
do something...
}