Environment
- Mozilla Firefox 20.0.1
- JQuery 1.7.1
У меня есть набор функций проверки:Почему здесь не работает метод addClass jQuery?
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');
фактически не добавляет класс. Я знаю, что класс работает, потому что, если я добавлю его вручную, визуальный стиль будет выглядеть так, как я хочу. Кроме того, я знаю, что это не добавление класса, потому что я проверяю элемент в Firebug после получения alert
.
Я что-то упустил? Я думал, что это было прямолинейно, даже проверено с помощью документации jQuery, и это выглядит правильно.
Вот пример одного из полей в разметке, а также:
<div>
<label for="FirstName">First Name</label>
<input type="text" id="FirstName" name="FirstName" />
</div>
EDIT
я даже вытащил 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;
}
Вашего код не показывают нам, какой тип объекта является ПгвЬЫат, LastName, ... они Jquery объектов? – RafH
@RafH, справедливо. Я обновил этот вопрос своими заявлениями. Благодаря! –
FWIW: 'Array.forEach()' не поддерживается IE старше IE9. –