Как вы проверяете, установлен флажок или нет?

#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% кроссбраузерное, поэтому в данном конкретном случае оно будет работать так, как ожидалось.