Добавление проверенного атрибута через jQuery

Я использую следующий виджет http://www.erichynds.com/examples/jquery-ui-multiselect-widget/demos/ До сих пор это работало отлично, но мне нужна помощь в добавлении атрибутов. При использовании Firebug я заметил, что при простом нажатии на флажок отмеченный атрибут не отображается, как я ожидал. В моем коде я изменил виджет, я смог добавить код для удаления атрибута checked.

this.removeAttribute(\'checked\'); this.checked=false;

если товар был проверен заранее. Я успешно использовал этот код

this.setAttribute(\'checked\', \'checked\'); this.checked=true; 

если элемент был снят, когда страница загружается.

Моя проблема возникает, когда мне нужно использовать оба набора кода для флажка, я попытался сделать следующее

onclick="if($(this).attr(\'checked\') == \'true\') { this.setAttribute(\'checked\', \'checked\'); this.checked=true; } else { this.removeAttribute(\'checked\'); this.checked=false; }

код удалит атрибут checked (если он был проверен перед загрузкой страницы), но когда я пытаюсь щелкнуть флажок, чтобы добавить атрибут (если он не отмечен при загрузке страницы), ничего не происходит.

Спасибо за любую помощь, и извините за мой плохой код.


person Chris    schedule 14.09.2010    source источник
comment
Спасибо, парни. Причина этого в том, что я пытаюсь выполнить событие toggle() в заголовке optgroup. Когда пользователь нажимает это, он сворачивает связанный с ним раздел, однако показывает отмеченные элементы. Это работает, если вы переключаете событие вперед и назад, не проверяя/снимая флажок. Проблема, с которой я сталкиваюсь, заключается в том, что если у вас есть элемент, который проверяется при загрузке страницы, toggle() будет работать. Если вы снимите этот флажок, toggle() не будет работать для этого элемента, потому что я смотрю на проверенный атрибут. Есть ли другой способ сделать это?   -  person Chris    schedule 14.09.2010
comment
вам не нужно экранировать одинарные кавычки, заключенные в двойные кавычки   -  person RobertPitt    schedule 14.09.2010


Ответы (4)


В jQuery для удаления атрибута используйте

this.removeAttr('checked');

и для установки использования атрибута

this.attr('checked', 'checked');
person Deviprasad Das    schedule 14.09.2010

Я заметил, что при простом нажатии на флажок проверенный атрибут не появляется

Это абсолютно правильно. Атрибут checked не соответствует текущей проверке ввода; на самом деле это соответствует начальной проверке из HTML-документа, проверке, которая будет восстановлена, если форма будет сброшена.

IE добавляет атрибут, потому что IE ошибается. getAttribute/setAttribute не работают в IE — никогда не используйте их в документе HTML! — они на самом деле устанавливают свойство, а не атрибут.

Это свойство defaultChecked. Но почему вы пытаетесь установить атрибут checked? Для этого почти никогда не бывает веских причин. Обычно вам нужно старое доброе свойство checked.

person bobince    schedule 14.09.2010

При использовании Firebug я заметил, что при простом нажатии на флажок отмеченный атрибут не отображается, как я ожидал.

Зачем вообще нужен атрибут checked? Свойство checked предоставляет все функциональные возможности, которые вам обычно необходимы, т. е. установка флажка установит element.checked на true и наоборот, т. е. изменение element.checked изменит состояние флажка.

person casablanca    schedule 14.09.2010
comment
В конечном итоге я использую свойство checked для переключения групп опций для эффекта отображения/скрытия. Если код обнаружит, что элемент отмечен при запуске события переключения, то показать отмеченные элементы, если не скрыть их. Есть ли другой способ достичь этой цели? - person Chris; 14.09.2010
comment
Вам просто нужно использовать свойство checked элемента, например. $('#id')[0].checked - person casablanca; 15.09.2010

person    schedule
comment
Это эквивалентно $(this).attr(checked,checked);? - person David Brossard; 16.09.2019
comment
Это предпочтительный ответ на jQuery 3.0+ (api.jquery.com/prop) - person chakeda; 12.03.2020