2010-08-04 8 views
18

Ich habe versucht, herauszufinden, wie das Attribut "aktiviert" zu einem Kontrollkästchen bei Klick hinzufügen. Der Grund, warum ich das tun möchte, ist so, wenn ich eine Checkbox abhake; Ich kann meinen lokalen Speicher als HTML speichern lassen. Wenn die Seite aktualisiert wird, wird das Kontrollkästchen aktiviert. Ab sofort, wenn ich es auscheck, verblasst es die Eltern, aber wenn ich speichern und neu zu laden bleibt es verblasst, aber das Kontrollkästchen ist deaktiviert.Add Attribut 'checked' auf Klick jquery

Ich habe versucht, $ (this) .attr ('checked'); aber es scheint nicht überprüft zu werden.

EDIT: Nach dem Lesen von Kommentaren scheint es, dass ich nicht klar war. Mein Standard-Input-Tag ist:

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

Ich brauche es so oben sein, wenn ich das Kontrollkästchen klicken, fügt „geprüft“ an das Ende davon. Ex:

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

Ich brauche es dies so zu tun, wenn ich die html auf einem lokalen Speicher zu speichern, wenn es geladen wird, ist es die Checkbox macht wie geprüft.

$(".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'); 
} 
}); 

Antwort

20

Es scheint, dies ist einer der seltenen Fälle, in denen die Verwendung eines Attributs tatsächlich angemessen ist. Die Methode attr() von jQuery hilft Ihnen nicht, weil sie in den meisten Fällen (einschließlich dieser) eine Eigenschaft und kein Attribut festlegt, was die Wahl ihres Namens etwas töricht erscheinen lässt. [UPDATE: Seit jQuery 1.6.1, the situation has changed slightly]

IE hat einige Probleme mit dem Verfahren DOM setAttribute aber in diesem Fall sollte es in Ordnung sein:

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

In IE, dies wird immer tatsächlich macht Das Kontrollkästchen wurde aktiviert. Wenn der Benutzer in anderen Browsern das Kontrollkästchen bereits aktiviert und deaktiviert hat, hat das Festlegen des Attributs keine sichtbaren Auswirkungen.Deshalb, wenn Sie das Kontrollkästchen garantieren wollen auch geprüft, wie mit der checked Attribut, müssen Sie die checked Eigenschaft festlegen als auch:

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

das Kontrollkästchen deaktivieren und entfernen Sie das Attribut, gehen Sie wie folgt vor:

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

Ich mag, was Sie hier haben , aber OP hat nach jQuery gefragt. Aber +1 für gerade js. Gut, den Kern zu kennen, bevor Sie den Rahmen lernen. – hookedonwinter

+0

Nun, ich bin mir nicht sicher, ob jQuery das tatsächlich tut. Könnte aber falsch sein. –

+0

Vielen Dank für Ihre Hilfe, gerade Javascript ist absolut in Ordnung mit mir, ich hatte gerade jquery verwendet, so dass ich dachte, ich würde fragen. Nochmals vielen Dank für Ihre Hilfe. – MoDFoX

28

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

nur attr('checked') den Wert von $ (this) 's Attribut checked zurück. Um es zu setzen, brauchen Sie dieses zweite Argument. Basierend auf <input type="checkbox" checked="checked" />

Edit:

Basierend auf Kommentare, eine geeignetere Manipulation wäre:

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

Und eine gerade JavaScript-Methode, besser geeignet und effizient:

this.checked = true; 

Dank @Andy E dafür.

+4

Aufgrund der Art und Weise jQuery Karten Attribute DOM Eigenschaften, '$ (this) .attr ('geprüft', true);' besser geeignet. 'this.checked = true;' ist noch angemessener und effizienter. –

+0

@ [Andy E] oh cool. Ich wusste das nicht. Bearbeiten meiner Antwort zu reflektieren. – hookedonwinter

+0

@hookedonwinter: basierend auf Ihrem Update denke ich, es wäre unhöflich von mir, nicht upvote;) +1. –

6

Wenn .attr() funktioniert nicht für Sie (vor allem bei der Überprüfung und Entfernen des Häkchens Boxen hintereinander), verwenden .prop() statt .attr().

+0

Ihre Antwort ist die beste (imho). Funktion .attr() fügt nur das Attribut hinzu, aktualisiert jedoch nicht den Status des Kontrollkästchens. .prop() - hat mir geholfen, mein Problem zu lösen. – Max

1

Verwendung dieser Code

var sid = $(this); 
sid.attr('checked','checked'); 
Verwandte Themen