私はこのフォームを持っています:
<form id="consult-form">
<div class="group">
<label for="pfname">First Name<span>*</span></label>
<div class="input">
<input class="large required" type="input" id="pfname" name="pfname" size="30" />
</div>
</div>
<div class="group">
<label for="plname">Last Name<span>*</span></label>
<div class="input">
<input class="xlarge required" type="input" id="plname" name="plname" size="30" />
</div>
</div>
<div class="group">
<label for="pphone">Phone<span>*</span></label>
<div class="input">
<input class="large required" type="tel" id="pphone" name="pphone" size="30" />
</div>
</div>
</form>
これら 3 つのフィールドを検証するためにjQuery Validationを使用しています。プラグインのコア機能を正常に動作させることができました。私がやろうとしているのは、特定の入力フィールドごとに、含まれる div.group に「.error」のクラスを追加することです。
私がこれまでに持っているものをお見せします:
$(function(){
$.validator.setDefaults({
errorElement: "span",
errorClass: "help-inline"
});
$('#consult-form').validate({
invalidHandler: function(form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
$required = $('input.required');
$required.parents('div.group').removeClass('error');
$required.each(function(index){
if ($(this).parent().has('span')) {
console.log(index+' is true');
$(this).parents('div.group').addClass('error');
}
});
}
},
messages: {
pfname: "Please enter your first name",
plname: "Please enter your last name",
pphone: "We need your phone number"
}
});
});
その結果、「.error」クラスが追加されないことがわかりました。配列トラバース関数をコメントアウトすると、クラスが追加されます。基本的に私が見ているのは、DOM の変更、スパン要素の追加と削除が、このコードによって読み取られていないことです。DOM の変更を監視するために live() または delegate() の組み合わせでこのようなものを使用する必要がありますか?
ここに jsFiddle があります: http://jsfiddle.net/ToddSmithSalter/ueNZ4/1/