2010-08-04 2 views
18

Я пытался выяснить, как добавить атрибут «checked» к флажку при нажатии. Причина, по которой я хочу сделать это, - это если я поставлю флажок; Я могу иметь локальное хранилище, которое можно сохранить как html, поэтому, когда страница обновляется, он отмечает, что флажок установлен. На данный момент, если я его проверю, он угасает родителя, но если я сохраню и перезагружу его, он исчезнет, ​​но флажок не установлен.Добавить атрибут 'checked' при щелчке jquery

Я пробовал делать $ (this) .attr ('checked'); но он, кажется, не хочет добавлять проверенные.

EDIT: После чтения комментариев кажется, что я не был ясен. Мой тег ввода по умолчанию:

<input type="checkbox" class="done"> 

мне нужно сверху так, когда я нажимаю на флажок, он добавляет: «проверено» до конца этого. Пример:

<input type="checkbox" class="done" checked> 

мне нужно сделать это так, когда я сохранить HTML в локальном хранилище, когда он загружает, он делает флажок в зарегистрированном.

$(".done").live("click", function(){ 
if($(this).parent().find('.editor').is(':visible')) { 
var editvar = $(this).parent().find('input[name="tester"]').val(); 
$(this).parent().find('.editor').fadeOut('slow'); 
$(this).parent().find('.content').text(editvar); 
$(this).parent().find('.content').fadeIn('slow'); 
} 
if ($(this).is(':checked')) { 
$(this).parent().fadeTo('slow', 0.5); 
$(this).attr('checked'); //This line 
}else{ 

$(this).parent().fadeTo('slow', 1); 
$(this).removeAttr('checked'); 
} 
}); 

ответ

20

Кажется, это один из редких случаев, когда использование атрибута действительно подходит. Метод jQuery attr() не поможет вам, потому что в большинстве случаев (включая это) он фактически устанавливает свойство, а не атрибут, делая выбор его имени несколько глупым. [UPDATE: Так как JQuery 1.6.1, the situation has changed slightly]

IE имеет некоторые проблемы с помощью метода DOM setAttribute, но в этом случае она должна быть тонкой:

this.setAttribute("checked", "checked"); 

В IE, это всегда будет на самом деле сделать флажок установлен. В других браузерах, если пользователь уже установил флажок и снял флажок, установка атрибута не будет иметь видимого эффекта.Поэтому, если вы хотите, чтобы гарантировать флажок, а также имеющие атрибут checked, вам необходимо установить checked свойства, а также:

this.setAttribute("checked", "checked"); 
this.checked = true; 

Чтобы снять флаг и удалить атрибут, выполните следующие действия:

this.setAttribute("checked", ""); // For IE 
this.removeAttribute("checked"); // For other browsers 
this.checked = false; 
+0

Мне нравится то, что у вас есть здесь , но OP запросил jQuery. Но +1 для прямых js. Хорошо знать суть, прежде чем вы изучите структуру. – hookedonwinter

+0

Ну, я не уверен, что jQuery на самом деле это делает. Однако может быть неправильно. –

+0

Благодарим вас за помощь, прямой javascript абсолютно в порядке со мной, я только что использовал jquery, поэтому решил, что спрошу. Еще раз спасибо за вашу помощь. – MoDFoX

28

$(this).attr('checked', 'checked')

только attr('checked') возвратит значение $ (этого) проверяемого атрибута 's. Чтобы установить его, вам понадобится второй аргумент. На основе <input type="checkbox" checked="checked" />

Edit:

На основе замечаний, более подходящая манипуляция бы:

$(this).attr('checked', true) 

И прямой Javascript метод, более целесообразным и эффективным:

this.checked = true; 

Спасибо @Andy E для этого.

+4

Благодаря тому, как JQuery отображений атрибутов свойств DOM, '$ (это) .attr ('проверено', правда);' является более целесообразным. 'this.checked = true;' еще более уместен, будучи более эффективным. –

+0

@ [Энди E] о, круто. не знал этого. редактируя мой ответ, чтобы отразить. – hookedonwinter

+0

@hookedonwinter: на основе вашего обновления я думаю, что было бы грубо из меня не повышать;) +1. –

6

Если .attr() не работает для вас (особенно при проверке и Непроверка коробки подряд), используйте .prop() вместо .attr().

+0

Ваш ответ лучший (imho). Функция .attr() просто добавляет атрибут, но не обновляет состояние флажка. .prop() - помог мне решить мою проблему. – Max

1

использовать этот код

var sid = $(this); 
sid.attr('checked','checked'); 
Смежные вопросы