2011-05-18 66 views
34

No estoy seguro de por qué esto no funciona.jQuery .attr ("disabled", "disabled") no funciona en Chrome

Cuando la gente haga clic en el botón 'editar' de mi solicitud, los campos de texto de movilidad reducida se pueden editar:

$("#bewerken").click(function(e) { 
    $("input[disabled='disabled']").removeAttr('disabled'); 
}); 

Entonces desea desactivar los campos de texto de nuevo cuando el usuario guarda; Tengo este código con destino al botón Guardar:

$("#save_school_changes").click(function(e) { 
    //stuff 

    $.ajax({ 
     type: "POST", 
     url: "/school/save_changes", 
     data: { //stuff }, 
     success: function(data) 
     { 
      $("#feedback_top").html("<p>" + data['message'] + "</p>").slideDown('slow').delay(2000).slideUp(); 
      $("input[type='text']").attr('disabled', 'disabled'); 

     } 
    }); 

    e.preventDefault(); 
}); 

Por lo que yo sé, esto debería desactivar los campos de texto de nuevo. Sin embargo, esto no parece funcionar en Chrome. Funciona en Firefox. Todavía no he tenido la oportunidad de probar en IE o Safari. ¿Hay alguna manera de hacer que esto funcione en Chrome también? ¡Muchas gracias!

+1

Nota al margen: se puede usar el selector [': disabled'] (http://api.jquery.com/disabled-selector/) en lugar de' input [disabled = 'disabled'] '. – namuol

+0

Oh, gracias; ¡No lo sabía! Actualicé mi código con él;) – cabaret

+0

No puedo creer la cantidad de respuestas aquí, pero nadie más que yo publicó una demo real -_- ¡lo que también tiene StackOverflow! jaja –

Respuesta

68

Si está utilizando jQuery 1.6 < hacer esto:

jQuery("input[type='text']").attr("disabled", 'disabled'); 

Si está utilizando jQuery 1.6 +:

jQuery("input[type='text']").prop("disabled", true); 

Ver esta pregunta: ¿por qué .prop() vs .attr() para las referencias.

O puede probar esto:

$('input:text').attr("disabled", 'disabled'); 

see here for info on :text

+1

Usando 1.5.2; por desgracia, todavía no puedo hacer que funcione con el código que me proporcionó. Gracias por su tiempo. – cabaret

+0

@cabaret, consulte mi actualización – Neal

+0

'$ (" input: text "). Attr (" disabled " , "deshabilitado"); '. Solo pegarlo para verificar si tengo el mismo código, heh. No puedo hacer que funcione. Por Dios, estúpido Chrome. :( – cabaret

0

Trate $("input[type='text']").attr('disabled', true);

+0

Todavía no se puede hacer funcionar en Chrome :( – cabaret

+0

Este es un ejemplo de la técnica: http://jsbin.com/ofuca3/edit - ¿La entrada que intentas deshabilitar está escrita mediante ajax? ¿O ya existe en el DOM? – RussellUresti

+0

Ya existe en el DOM. Voy a retirar su enlace! Gracias – cabaret

0

si va a quitar todos los atributos con discapacidad de entrada, entonces ¿por qué no hacer:

$("input").removeAttr('disabled'); 

A continuación, después del éxito ajax:

$("input[type='text']").attr('disabled', true); 

Asegúrese de que utiliza quitar el atributo deshabilitado antes de enviar, o no enviará esos datos. Si necesita enviarlo antes de cambiarlo, debe usar readonly en su lugar.

+0

Una cosa a tener en cuenta es utilizar de forma inmediata si está buscando enviar los datos a través de get o post. – fanfavorite

0

¿Has probado con prop() ??

Bien prop() parece works for me.

+0

"tiene" que ha intentado –

+0

Nota para @cabaret Tho, esto es exclusivo de jQuery 1.6, así que si no eres de esa versión no funcionará esta –

+0

ver mi respuesta y la respuesta de la OP – Neal

0

aquí:
http://jsbin.com/urize4/edit

la vista previa
http://jsbin.com/urize4/

Debe utilizar "readonly" en lugar como:

$("input[type='text']").attr("readonly", "true"); 
+1

Gracias. lo comprobaré.¿Hay una diferencia crucial entre readonly y disabled o básicamente es la misma? – cabaret

+0

Es lo mismo, excepto por una cosa menor ... simplemente no tiene ningún CSS de navegador predeterminado, mientras que lo hace con discapacidad. En este ejemplo acabo de hacer '[readonly] {filter: alpha (opacity = 50); opacidad: 0.5; } 'y logró el mismo afecto. –

+3

Una gran diferencia: los campos con el conjunto 'readonly' se envían al servidor cuando se envía el formulario, los elementos 'disabled' no. –

2

Es un antiguo puesto pero ninguno de esta solución trabajado para por lo que estoy publicando mi solución si alguien lo encuentra útil.

Acabo de tener el mismo problema.

En mi caso, el control que necesitaba para desactivar era un control de usuario con menús desplegables que podría desactivar en IE pero no en Chrome.

mi solución fue la de desactivar cada objeto hijo, no sólo el control de usuario, con ese código:

$('#controlName').find('*').each(function() { $(this).attr("disabled", true); }) 

Está funcionando para mí en cromo ahora.

0

Mi problema con esto fue que el elemento que usa el atributo attr debe definirse como un elemento de formulario, es decir, un tipo de entrada para que funcione. Ambos trabajaron con attr() y prop() pero eligieron este último para una mantenibilidad futura.

3

Para mí, ninguna de estas respuestas funcionó, pero finalmente encontré una que sí.

Necesitaba esto para IE-

$('input:text').attr("disabled", 'disabled'); 

también tuve que añadir este para Chrome y Firefox -

$('input:text').AddClass("notactive"); 

y esto -

<style type="text/css"> 
    .notactive { 
     pointer-events: none; 
     cursor: default; 
    } 
</style> 
Cuestiones relacionadas