環境
- 的Mozilla Firefox 20.0.1
- 的jQuery 1.7.1
我有一組驗證功能:爲什麼jQuery addClass方法不在這裏工作?
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
後檢查了Firebug中的元素。
我在這裏錯過了什麼嗎?我認爲這是直截了當的 - 即使使用jQuery文檔進行檢查,它看起來是對的。
這裏是標記以及中的一個字段的一個例子:
<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;
}
您的代碼犯規告訴我們什麼樣的對象的名字,姓氏,......他們在jQuery的對象? – RafH 2013-05-08 23:03:32
@RafH,夠公平的。我已經用他們的聲明更新了這個問題。謝謝! – 2013-05-08 23:04:36
FWIW:Array.forEach()不支持比IE9更早的IE。 – 2013-05-08 23:05:08