環境
- Mozilla Firefox 20.0.1
- jQuery1.7.1
私は検証関数のセットを持っています:
var firstName = $('#FirstName'),
lastName = $('#LastName'),
dateOfBirth = $('#DateOfBirth'),
city = $('#City'),
phone = $('#Phone'),
email = $('#Email'),
insType = $('#InsType'),
otherInsType = $('#OtherInsType'),
insID = $('#InsID'),
service = $('#Service'),
otherService = $('#OtherService'),
comments = $('#Comments'),
outOfPocket = $('#OutOfPocket'),
permission = $('#Permission'),
signature = $('#Signature');
function formIsValid() {
if (missingRequiredField([
firstName, lastName, dateOfBirth, city, phone, email,
insType, insID, service, comments, outOfPocket, permission,
signature
])) {
alert('There is a missing required field.');
return false;
}
alert('The form was valid.');
return false;
}
function missingRequiredField(objs) {
var hasError = false;
objs.forEach(function(o) {
if (!$(o).val()) {
$(o).addClass('error');
hasError = true;
}
});
return hasError;
}
フィールドを空白のままにするとalert('There is a missing required field.');
. しかし、何らかの理由で、$(o).addClass('error');
実際にはクラスを追加していません。クラスを手で追加すると、視覚的なスタイルが私が望むように見えるので、クラスが機能することはわかっています。さらに、alert
.
ここで何か不足していますか?これは簡単だと思いました-jQueryのドキュメントで確認しても、私には正しいようです。
マークアップのフィールドの 1 つの例を次に示します。
<div>
<label for="FirstName">First Name</label>
<input type="text" id="FirstName" name="FirstName" />
</div>
編集
私forEach
は基本的なfor
ループに引き出しても、addClass
まだかかりません。フィールドに値がないときにhasError
返されるため、関数は機能しています-ちょうど頑固です。注:このバージョンでは、周囲の不要な部分を削除しました。true
addClass
$
o
function missingRequiredField(objs) {
var hasError = false;
for (var i = 0; i < objs.length; i++) {
var o = objs[i];
if (!o.val()) {
o.addClass('error');
hasError = true;
}
}
return hasError;
}