#javascript #jquery
#javascript #jquery
Вопрос:
Я думал, что это сработает:
if ($(this).attr('checked')) {}
но мне пришлось написать это таким образом:
if ($(this).is(':checked')) {}
Вопрос: Почему?
Комментарии:
1. Почему — это не вопрос. Что насчет этого кажущегося странным пользователя 2k?
2. 1 @Hogan за то, что заставил меня смеяться.
3. Какую версию jquery вы используете?
4. Используете ли вы последнюю версию jQuery? Потому что тогда вам пришлось бы использовать
.prop
вместо.attr
5. @Pixelbobby — Изначально я поставил «Потому что». Пользовательский интерфейс пожаловался, поэтому я переписал.
Ответ №1:
Когда вы запрашиваете attr checked, вы не получаете логическое значение:
// this would be correct
if($(this).attr('checked') == 'checked')
// jQuery 1.6
if($(this).prop('checked'))
Комментарии:
1. Как и выбранный, я считаю, что есть браузеры и случаи, когда это не удалось бы. (Таким образом, изменение на использование prop).
2. Совершенно нормально, чтобы значением атрибута была логическая константа
true
— в частности, это не обязательно должна быть строка «checked». В DOM атрибут действительно является простым логическим значением.
Ответ №2:
Поскольку я недавно проходил через это, это зависит от того, какую версию jQuery вы используете. Начиная с версии 1.6, работа attr
с собственными свойствами (например, «проверено», «отключено») — свойствами, являющимися атрибутами, которые должны либо существовать, либо нет — изменилась, поскольку они могут возвращать противоречивые результаты в зависимости от поведения браузера.
Правильный способ установить или протестировать свойство в версии 1.6 — это использовать новую prop
функцию, которая всегда возвращает true или false. 2-й метод, который вы используете, также допустим для тестирования.
Ответ №3:
Ответ №4:
А еще лучше, просто используйте this.checked
, который возвращает либо «true», либо «false». Нет необходимости использовать jQuery, особенно если у вас уже есть узел DOM.
Комментарии:
1. Я боюсь использовать любой собственный JavaScript, если есть альтернатива jQuery, потому что я не знаю, будет ли он вести себя так в одном браузере и иначе в другом браузере. jQuery помогает мне убедиться, что мой код нормализован.
2. Понятно, большую часть времени я придерживаюсь одного и того же подхода. Однако
checked
свойство на 100% кроссбраузерное, поэтому в данном конкретном случае оно будет работать так, как ожидалось.