2011-07-05 17 views
6

Estoy tratando de desactivar un botón - el uso de jQuery 1.4.4 el siguiente código en IE¿Desactivar un botón en IE6, IE7, IE8?

jQuery('#id').attr("disabled", true);

Con el HTML de

<button id="id" type="button" 
    class="some-class" 
    disabled="">Comment</button> 

Obras en FF, Chrome, etc y por supuesto, no funciona en IE? ¿Cómo puedo arreglarlo?

es decir, el <button disabled="disabled"> parece no funcionar en IE o?

Editar: Nótese también que <button id='id' disabled>foobar</button> es HTML válido

+3

+1 para "por supuesto" –

+0

@WTP :) - es decir, justo ama * pi # $ & * ng su día – Tom

+1

@Tom: sé cómo te sientes. Si ve a Redmond en llamas en las noticias, llámeme; iré y le echaré un poco de gasolina. – Bojangles

Respuesta

16

XML/HTML valores de atributo son cadenas. Los valores "verdadero" y "falso" have no special meaning (technically, they aren't even allowed). La convención es para ajustar el valor al nombre de atributo:

jQuery('#id').attr("disabled", "disabled"); 

También tenga en cuenta que en el código HTML, <button disabled=""> ya se desactivará el botón. Simplemente dejar de lado el atributo disabled o volver a habilitarla con jQuery:

jQuery('#id').removeAttr("disabled"); 
+0

Lo sentimos, pero esto no está bien. Cuando intenta marcar una casilla de verificación en JQuery, la única forma en que funcionará es con $ ("input [type = checkbox]"). Attr ("checked", true); –

+0

@philhag - ¿es solo yo o no '' ¿realmente deshabilita el botón en IE? http://jsfiddle.net/kxVRx/9/ – Tom

+0

@Liam Baily El comportamiento está corregido en el estándar HTML5, por lo que no estoy seguro de cómo no podría ser. De todos modos, '$ (" input [type = checkbox] "). Attr (" checked "," checked ");' [* does * work] (http://phihag.de/2011/so/jquery-checked. html). – phihag

0

Probar:

jQuery('#id').attr("disabled", "disabled"); 

Los valores de atributo deben ser cadenas, no boolean

+0

Quiere desactivar, no habilitar el botón –

+0

@alex - quiero desactivar el botón en IE - ¿el problema es que IE no parece gustarle el código anterior? es decir, un usuario puede simplemente hacer clic y no desactiva el botón? – Tom

+0

D'oh nuevamente. Sigo haciendo eso hoy. Editado – Alex

0

sólo para añadir un valor adicional a las otras respuestas publicadas aquí.

Creo que su redacción es un poco escasa y, por lo que parece, desea saber cómo deshabilitar y volver a habilitar un botón de navegador cruzado.

El atributo disabled, cuando está presente, siempre debe deshabilitar el elemento, sin importar su valor. El valor recomendado es disabled="disabled".

$('#id').attr("disabled", "disabled") 

Con el fin de volver a activar el elemento que le quiere quitar la attrbitute disabled por completo (como se ha señalado en otras respuestas).

$('#id').removeAttr('disabled'); 
1

que estaba teniendo problemas idénticos en IE8, y fue capaz de resolverlos, por lo que me gustaría añadir en un par de puntos. La solución ofrecida por phihag es correcta e incorrecta. Es cierto que XML/HTML no aceptará un verdadero valor booleano como atributo, pero estamos hablando de la sintaxis de jQuery, que acepta booleanos como argumentos y establece los atributos de forma adecuada.

Con la deshabilitación y habilitación de elementos de entrada, en IE, lo que encontré para trabajar, consistentemente, es simplemente no "codificar" el valor inicial deseado directamente en el X/HTML. Si se va a deshabilitar un control desde la representación inicial, lo mejor es llamar a una función tan pronto como se represente la página, para deshabilitarla. Tal vez un poco complicado y, como muchas cosas, no debería ser así, pero eso es lo que terminó funcionando para mí. Muy simple.

Espero que ayude a alguien. Pasé por muchos esfuerzos de depuración para identificar ese.

0

Esto es de JQuery API documentation:

$(".selector").button("option", "disabled", true); 

Funciona para mí, incluso en IE 8 con jQuery UI 1.8.14 o superior. En versiones anteriores, los eventos de clic se disparan incluso en los botones desactivados. Así, en el caso, usted tiene que evaluar disabledness del botón y cancelar el evento:

function clickHandler(event) { 
    if ($(event.currentTarget).button("option", "disabled")) { 
     return false; 
    } 
    // other handle stuff... 
} 
Cuestiones relacionadas