2012-01-30 11 views
40

Usando jquery, ¿cómo simplemente verifico si solo es de lectura?¿Cómo comprobar si el menú desplegable está deshabilitado?

esto es lo que estoy tratando ..

$("#item").keydown(function (event) { 
    //alert(event.keyCode); 
    if (event.keyCode == 13) { 
     $("#ok").click();    
     if ($('#dropLength').prop("disabled") == false) { 
      $("#dropLength").focus(); 
      return; 
     } 
     if ($('#dropUnit').prop("disabled") == false) { 
      $("#dropUnit").focus(); 
      return; 
     } 
     $("#qty").focus();     
     return ; 
    } 
}); 

Los menús desplegables se ponen a sólo lectura utilizando jQuery también:

if ($('#dropLength').find('option').length <= 1) { 
     $('#dropLength').attr("disabled", "disabled"); 
} 
if ($('#dropUnit').find('option').length <= 1) { 
     $('#dropUnit').attr("disabled", "disabled"); 
} 
+0

¿Por readonly te refieres a deshabilitado? –

+0

Tenga en cuenta que HTML define dos atributos que están relacionados pero son diferentes: 'readonly' y' disabled'. –

Respuesta

81

La solución legado, antes de 1.6, era usar .attr y manejar el valor devuelto como bool. El principal problema es que el tipo devuelto de .attr ha cambiado a string, y por lo tanto la comparación con == true está rota (ver http://jsfiddle.net/2vene/1/ (y cambiar la versión de jquery)).

Con 1.6 .prop se introdujo, que devuelve bool.

Sin embargo, sugiero utilizar .is(), como el tipo devuelto es intrínsecamente bool, como:

$('#dropUnit').is(':disabled'); 
$('#dropUnit').is(':enabled'); 

Además .is() es mucho más natural (en términos de "lenguaje natural") y añade más condiciones que una comparación simple de atributos (p. ej .: .is(':last'), .is(':visible'), ... ver documentation on selectors).

+0

Esta respuesta tiene información incorrecta y engañosa. Está bien utilizar '$ ('# dropLength'). Prop (" disabled ") == false' con JQuery 1.6+. Funciona [email protected] confunde '$ ('# dropLength'). Attr (" disabled ")' (que no devolverá 'false/true') con' $ ('# dropLength'). Prop ("disabled") '(que devolverá 'falso/verdadero'). Es completamente seguro usar '$ ('# dropLength'). Prop (" disabled ")' como un booleano. http://jsfiddle.net/nsnomatz/ –

+0

@DougS No estoy confundiendo '.prop' con' .attr', ya que mi uso de '.attr' estaba en porpuse y explícito en el violín. Como mencioné en mi respuesta: el tipo devuelto de '.attr' ha cambiado a' cadena' (ya que el valor del atributo es una cadena), y muchas implementaciones heredadas dependen de '.attr' (como' .prop 'se introdujo con 1.6) devolviendo un' bool'. Esa es también la razón por la que nunca haría una comprobación explícita con '.attr' ni' .prop' y más bien haría un '.is' con una pseudoclase apropiada. –

+0

Vas a confundir al demonio a las personas que leen tu respuesta y piensan que 'prop' está roto. ¡No está roto! Funciona bien. La pregunta original ni siquiera usa el código al que te refieres. Él está usando 'prop' correctamente. Y ahora ha aclarado en su comentario que prefiere usar 'is' por si acaso' prop' deja de funcionar en el futuro. Arregle su respuesta para que la gente sepa que 'prop' no está roto y funciona bien como booleano. –

-3

Es $(#dropUnit).attr("disabled") == false

+2

-, no xhtml válido, y desde 1.7.1 este uso se rompe si 'disabled =" disabled "' ... ¡El selector btw no es válido! –

+0

ver http://jsfiddle.net/2vene/1/ (y cambiar la versión de jquery) –

+3

¡correcto! vota tu respuesta y tu comentario. – Mike

5

trate de seguir o detectar demostración disabled y readonly

$('#dropUnit').is(':disabled') //Returns bool 
$('#dropUnit').attr('readonly') == "readonly" //If Condition 

Puede comprobar jQuery FAQ.

1

Hay dos opciones:

Primera

También se puede utilizar como is()

$('#dropDownId').is(':disabled'); 

Segunda

Usando == true comprobando si el valor de los atributos es disabled. attr()

$('#dropDownId').attr('disabled'); 

lo que usted siente mejor se adapte, puede utilizar :)

Salud!

+1

NO USE' == verdadero' o '== false' - ¡el uso está roto alrededor de 1.6! ver mi respuesta y el enlace para probar! –

+0

@Manish ¿Se puede utilizar esto solo para personas con discapacidad? Lo usé para verificar habilitado y falla !! – hima

+1

Ignora el comentario de Andreas de arriba. Es parcialmente incorrecto Está confundiendo 'attr ('disabled')' con 'prop ('disabled')'. Usar 'prop ('disabled')' como un booleano funciona bien. –

Cuestiones relacionadas