A partir de jQuery 3, removeAttrya no establece la propiedad correspondiente en false:
Antes de jQuery 3.0, utilizando .removeAttr()un atributo booleano como checked, selectedo readonlypodría también establecer la correspondiente propiedad llamada a false. Este comportamiento era necesario para las versiones antiguas de Internet Explorer, pero no es correcto para los navegadores modernos porque el atributo representa el valor inicial y la propiedad representa el valor actual (dinámico).
Casi siempre es un error utilizarlo .removeAttr( "checked" )en un elemento DOM. La única vez que podría ser útil es si el DOM se va a serializar más adelante en una cadena HTML. En todos los demás casos, .prop( "checked", false )debe usarse en su lugar.
Por lo tanto, solo .prop('checked',false)es la forma correcta cuando se usa esta versión.
Respuesta original (de 2011):
Para los atributos que tienen propiedades booleanas subyacentes (de las cuales checkedes uno), removeAttrestablece automáticamente la propiedad subyacente en false. (Tenga en cuenta que esta es una de las "correcciones" de compatibilidad con versiones anteriores agregadas en jQuery 1.6.1).
Entonces, cualquiera funcionará ... pero el segundo ejemplo que dio (usando prop) es el más correcto de los dos. Si su objetivo es desmarcar la casilla de verificación, realmente desea afectar la propiedad , no el atributo, y no es necesario pasar removeAttrpara hacerlo.
@tandu: Usted puede , pero no debe. De los documentos: " Nota: No use [ removeProp()] para eliminar propiedades nativas como marcadas, deshabilitadas o seleccionadas. Esto eliminará la propiedad por completo y, una vez eliminada, no se puede agregar nuevamente al elemento. Use .prop()para establecer estas propiedades en falso en lugar." removePropestá realmente diseñado para usarse solo con propiedades personalizadas.
John Flatness
17
use checked: propiedad verdadera, falsa de la casilla de verificación.
Sí, para cromo, use: $("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Varilla
Utilizo un componente personalizado (CSS + JS) para reemplazar la radio de entrada y la casilla de verificación. Esta es la única forma que funciona para mí. ¡Gracias!
Silvio Delgado
3
Otra alternativa para hacer lo mismo es filtrar el atributo type = checkbox :
Recuerde que la diferencia entre atributos y propiedades puede ser importante en situaciones específicas. Antes de jQuery 1.6 , el método .attr () a veces tomaba en cuenta los valores de propiedad al recuperar algunos atributos, lo que podía causar un comportamiento inconsistente. A partir de jQuery 1.6, el método .prop () proporciona una forma de recuperar explícitamente valores de propiedad, mientras que .attr () recupera atributos.
Respuestas:
jQuery 3
A partir de jQuery 3,
removeAttr
ya no establece la propiedad correspondiente enfalse
:Registro de cambios
Por lo tanto, solo
.prop('checked',false)
es la forma correcta cuando se usa esta versión.Respuesta original (de 2011):
Para los atributos que tienen propiedades booleanas subyacentes (de las cuales
checked
es uno),removeAttr
establece automáticamente la propiedad subyacente enfalse
. (Tenga en cuenta que esta es una de las "correcciones" de compatibilidad con versiones anteriores agregadas en jQuery 1.6.1).Entonces, cualquiera funcionará ... pero el segundo ejemplo que dio (usando
prop
) es el más correcto de los dos. Si su objetivo es desmarcar la casilla de verificación, realmente desea afectar la propiedad , no el atributo, y no es necesario pasarremoveAttr
para hacerlo.fuente
removeProp()
] para eliminar propiedades nativas como marcadas, deshabilitadas o seleccionadas. Esto eliminará la propiedad por completo y, una vez eliminada, no se puede agregar nuevamente al elemento. Use.prop()
para establecer estas propiedades en falso en lugar."removeProp
está realmente diseñado para usarse solo con propiedades personalizadas.use
checked
: propiedad verdadera, falsa de la casilla de verificación.jQuery:
fuente
Recomiendo usar ambos, prop y attr porque tuve problemas con Chrome y los resolví usando ambas funciones.
fuente
$("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Otra alternativa para hacer lo mismo es filtrar el atributo type = checkbox :
o
Recuerde que la diferencia entre atributos y propiedades puede ser importante en situaciones específicas. Antes de jQuery 1.6 , el método .attr () a veces tomaba en cuenta los valores de propiedad al recuperar algunos atributos, lo que podía causar un comportamiento inconsistente. A partir de jQuery 1.6, el método .prop () proporciona una forma de recuperar explícitamente valores de propiedad, mientras que .attr () recupera atributos.
Saber más ...
fuente