2012-03-30 12 views
6

estoy actualizando desde jQuery 1.5.1 - He leído sobre la forma "nueva" a "marcar" casillas de verificación (en 1.6) usando¿Cuál es la forma correcta de desmarcar una casilla de verificación en jQuery 1.7?

prop("checked", true); 

Pero ¿cuál es la forma correcta/preferido para eliminar una casilla de verificación?

Ambos métodos parecen funcionar

$('#someSelector').removeProp("checked"); 

o

$('#someSelector').prop("checked", false); 

¿Existe una distinción entre estos métodos? ¿Qué debería estar usando?

Gracias

Respuesta

12

Según http://api.jquery.com/removeprop/ .removeProp no se debe utilizar para eliminar marcado. (porque está totalmente eliminado y no se puede volver a agregar).

El método .removeProp() elimina las propiedades establecidas por el método .prop().

Con algunas propiedades integradas de un elemento DOM u objeto de ventana, los navegadores pueden generar un error si se intenta eliminar la propiedad . jQuery primero asigna el valor indefinido a la propiedad y ignora cualquier error que genere el navegador. En general, es solo necesario para eliminar las propiedades personalizadas que se han establecido en un objeto, y propiedades no incorporadas (nativas).

Nota: No utilice este método para eliminar propiedades nativas como marcado, deshabilitado o seleccionado. Esto eliminará por completo la propiedad y, una vez eliminada, no podrá agregarse nuevamente al elemento. Use .prop() para establecer estas propiedades en falso en su lugar.

-1
$('#someSelector').removeAttr('checked'); 

Eliminar el atributo comprobado y que debe ser bueno para ir.

Más información sobre prop vs attr aquí. También mencionan el atributo verificado y lo llaman específicamente como un atributo, no como una propiedad.

http://api.jquery.com/prop/

+0

Eso no responde la pregunta ... ¿por qué tu respuesta es mejor que '.removeProp (" checked ")'? ¿Y por qué es mejor que la alternativa '.prop (" checked ", false)' or '.attr (" checked ", false)'? – Sparky

+1

"atributos" son un subconjunto de "propiedades", por lo tanto, usar siempre 'prop' en lugar de' attr' es perfectamente aceptable, y nunca tendrá que averiguar si 'propiedad' es un' atributo'. – Sparky

+1

Los documentos jQuery a los que se refiere en realidad dicen que es preferible utilizar prop() en este caso. "Si se utiliza jQuery 1.6, el código if ($ (elem) .attr (" checked ")) recuperará el atributo de contenido real, que no cambia ya que la casilla de verificación está marcada y desmarcada. Está destinado solo a almacenar el valor predeterminado o valor inicial de la propiedad marcada ". – Niko

3

hiya I, aunque mi comentario anterior será demasiado texto embutida en lo que escribir aquí para mayor claridad: (Y estoy de acuerdo con @Claudio)

Si esto no ayuda, hágamelo saber ¡Eliminaré los aplausos de mi publicación! :)

por lo que desde aquí: http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/

[cita] a partir del 1.6 pero reconozco ...

elemento de valor es algo más, entonces es la propiedad o el valor del atributo . Cuando desee desmarcar una casilla de verificación, quiere eliminar la propiedad marcada , así que use $ ("# subscribe: checked"). Prop ("checked", false);

[cita]

jQuery 1.6 +

Utilice la función nueva .prop():.

$ ("myCheckBox ") prop (" marcada" , cierto);

$ (". MyCheckbox"). Prop ("checked", false);

Setting "checked" for a checkbox with jQuery? Espero que ayude, tienes razón, reconozco! ¡aclamaciones!

11

Para responder a su pregunta con más precisión:

siempre preferirían

$('#someSelector').prop('checked', false); 

sobre

$('#someSelector').removeProp('checked'); 

debido a una diferencia importante entre atributo y la propiedad es en este caso, que eliminar el atributo equivale a establecer la propiedad (is-checked) en false.

Eliminar la propiedad "marcada" de una casilla de verificación no tiene ningún sentido en absoluto, porque la casilla de verificación siempre estará marcada o desmarcada. Por lo tanto establecer la propiedad en falso para desmarcar la casilla es lógicamente consistente, eliminar la propiedad no lo es.

Cuestiones relacionadas