2012-04-20 15 views
20
var disableSelection = function(){ 
    $("#elementId").attr("disabled","disabled");  
}; 

var enableSelection = function(){ 
    $("#elementId").removeAttr("disabled"); 
}; 

tengo siguientes requisitos:removeAttr() no quitar atributo "desactivado" en el IE

  1. desactivar el elemento SELECT con el fin de impedir que los usuarios seleccionar opciones
  2. elemento SELECT impedido tenga algún elemento OPCIÓN ya
  3. seleccionado
  4. de presentar eventos permiten elemento SELECT discapacitados con el fin de guardar el valor seleccionado

Agregar atributo "deshabilitado" funciona bien para IE. Sin embargo, cuando intento para eliminar el atributo utilizando el método jQuery revomeAttr(), entonces en lugar de eliminar el atributo:

  1. método agrega "desactivado" atributo al elemento SELECT previamente habilitado método
  2. no elimina "desactivado" atribuir
+3

¿Qué tal '' $ ("# elementId"). Attr ("disabled", ""); '? –

+0

¿Quizás esté volviendo a deshabilitar el cuadro de selección en otro lugar de su código? sin más contexto, es muy difícil de decir. – Qpirate

+1

configurando $ ("# elementId"). Attr ("disabled", ""); elemento en IE y Firefox .. también el establecimiento de $ ("# elementId") desactiva. attr ("desactivado", false) no tendrá ningún efecto en el IE. –

Respuesta

52

uso .prop en lugar de .attr afectar desactivado el estado de un elemento:

var disableSelection = function(){ 
    $("#elementId").prop("disabled", true);  
}; 

var enableSelection = function(){ 
    $("#elementId").prop("disabled", false); 
}; 

Para obtener más información, ver .prop() vs .attr().

+0

Jon, muchas gracias. El método .prop() funciona sin problemas. –

+2

la posibilidad de aceptar la respuesta – ssedano

+6

Sé que esto fue publicada atrás en el '12, pero ahora (en 2015), si está utilizando EI11, la solución 'prop' no soluciona el problema. ¿Alguna actualización sobre esto? – cidthecoatrack

3

Puede utilizar removeProp('disabled') lugar. Funcionó para mí, mientras que removeAttr('disabled') no.

1

Jquery Docs dice, sobre .removeProp():

Nota: No utilice este método para quitar las propiedades nativas como está marcado,> desactivado, o seleccionado. Esto eliminará la propiedad por completo y, una vez que se elimine, no podrá agregarse nuevamente al elemento. Utilice .prop() para establecer estas propiedades> en falso en su lugar.

Notas adicionales:

En Internet Explorer anteriores a la versión 9, usando .prop() para establecer un elemento DOM> propiedad para que no sea un simple valor simple (número, cadena o> boolean) cualquier cosa puede causar la memoria pierde si la propiedad no se elimina (utilizando> .removeProp()) antes de que el elemento DOM se elimine del documento. Para establecer de forma segura> valores en objetos DOM sin pérdidas de memoria, use .data().

Cuestiones relacionadas