2010-08-04 29 views
18

He estado tratando de descubrir cómo agregar el atributo "marcado" a una casilla de verificación al hacer clic. La razón por la que quiero hacer esto es si marqué una casilla de verificación; Puedo hacer que mi almacenamiento local lo guarde como html, de modo que cuando la página se actualice, note que la casilla de verificación está marcada. A partir de ahora, si lo marque, se desvanece el elemento principal, pero si lo guardo y lo vuelvo a cargar se queda descolorido, pero la casilla de verificación está desmarcada.Agregar atributo 'marcado' al hacer clic en jquery

He intentado hacer $ (this) .attr ('checked'); pero no parece querer agregar marcado.

EDITAR: Después de leer los comentarios parece que no estaba siendo claro. Mi etiqueta de entrada por defecto es:

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

necesito que sea superior así que cuando hago clic en la casilla de verificación, se añade "controlada" al final de eso. Ej:

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

lo necesito para hacer esto así que cuando me ahorro el html en el almacenamiento local, cuando se carga, que hace que la casilla de verificación como equipaje.

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

Respuesta

20

Parece que esta es una de las raras ocasiones en las que el uso de un atributo es realmente apropiado. El método attr() de jQuery no lo ayudará porque en la mayoría de los casos (incluido esto) establece una propiedad, no un atributo, lo que hace que la elección de su nombre parezca algo tonta. [ACTUALIZACIÓN: Desde jQuery 1.6.1, the situation has changed slightly]

IE tiene algunos problemas con el método DOM setAttribute pero en este caso debe estar bien:

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

En IE, esto será siempre hacer realidad la casilla de verificación marcada. En otros navegadores, si el usuario ya ha marcado y desmarcado la casilla de verificación, la configuración del atributo no tendrá efecto visible.Por lo tanto, si se quiere garantizar la casilla de verificación está activada, además de tener el atributo checked, es necesario establecer la propiedad checked así:

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

desmarcar la casilla de verificación y quitar el atributo, haga lo siguiente:

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

Me gusta lo que tiene aquí , pero OP pidió jQuery. Pero, +1 para js recta. Es bueno saber el núcleo antes de aprender el marco. – hookedonwinter

+0

Bueno, no estoy seguro de que jQuery haga esto. Sin embargo, podría estar equivocado. –

+0

Gracias por su ayuda, javascript directo es absolutamente bueno para mí, recién había estado usando jquery, así que pensé que podría preguntar. Otra vez, gracias por tu ayuda. – MoDFoX

28

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

simplemente attr('checked') devolverá el valor de $ (this) atributo checked 's. Para establecerlo, necesitas ese segundo argumento. Sobre la base de <input type="checkbox" checked="checked" />

Editar:

basado en los comentarios, una manipulación más adecuada sería:

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

y un método Javascript recta, más apropiado y eficiente:

this.checked = true; 

Gracias @Andy E para eso.

+4

Debido a la forma de mapas de jQuery atribuye a propiedades DOM, '$ (this) .attr ('marcado', true);' es más apropiado. 'this.checked = true;' es aún más apropiado, siendo más eficiente. –

+0

@ [Andy E] oh genial. no lo sabía editando mi respuesta para reflejar – hookedonwinter

+0

@hookedonwinter: en función de su actualización, creo que sería una grosería no invitarme a votar;) +1. –

6

Si .attr() no funciona para usted (sobre todo cuando la comprobación y cajas desmarcar en la sucesión), utilice en lugar de .prop().attr().

+0

Tu respuesta es la mejor (imho). La función .attr() simplemente agrega el atributo, pero no actualiza el estado de la casilla de verificación. .prop() - me ha ayudado a resolver mi problema. – Max

1

uso este código

var sid = $(this); 
sid.attr('checked','checked'); 
Cuestiones relacionadas