2010-09-27 30 views
94

Tengo un cuadro de entrada y quiero que esté deshabilitado y al mismo tiempo ocultarlo para evitar problemas al portar mi formulario.Agregar atributo deshabilitado al elemento de entrada usando Javascript

hasta ahora tengo el siguiente código para ocultar mi entrada:

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show().find('.longboxsmall').hide(); 
}); 

Ésta es la entrada que que se oculta como resultado:

<input class="longboxsmall" type="text" /> 

¿Cómo puedo también añadir el atributo disabled a la entrada?

Respuesta

218

$("input").attr("disabled", true); como de ... No sé nada más.

Es diciembre de 2013 y realmente no tengo ni idea de qué decirte.

Primero siempre fue .attr(), entonces siempre era , así que volví aquí actualicé la respuesta y la hice más precisa.

Luego, un año más tarde, jQuery cambió de opinión otra vez y ni siquiera quiero hacer un seguimiento de esto.

Para resumir, a partir de ahora, esta es la mejor respuesta: "puedes usar ambas ... pero depende".

Debe leer esta respuesta en su lugar: https://stackoverflow.com/a/5876747/257493

y su liberación notas para que el cambio se incluyen aquí:

Ni .attr() ni .prop() se debe utilizar para obtener/establecer valor. Use el método .val() en su lugar (aunque el uso de .attr ("valor", "algún valor") continuará funcionando, como lo hizo antes de 1.6).

resumen del uso preferido

El método .prop() se debe utilizar para booleanas atributos/propiedades y para propiedades que no existen en html (como window.location). Todos los demás atributos (los que puede ver en el html) pueden y deben continuar siendo manipulados con el método .attr().

O en otras palabras:

".prop = no-documento de cosas"

".attr" = documento de cosas

... ...

Que todos aprendamos una lección aquí sobre la estabilidad de la API ...

+7

+1 para la actualización. Gracias. – rie819

+3

+1 para hacer que el texto de actualización sea lo suficientemente grande como para prestarle atención –

+0

@VaelVictus No tan rápido. Lamento decir que lo han cambiado nuevamente un año después de que publiqué esto ... y me olvidé de esta respuesta. Lea esta respuesta: http://stackoverflow.com/a/5876747/257493 – Incognito

2

sólo tiene que utilizar el método de jQuery attr()

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled'); 
+0

y eliminar el estado deshabilitado con '.removeAttr ('disabled');' – ruhong

10

Usted puede obtener el elemento DOM, y establecer directamente la propiedad discapacitados.

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show() 
      .find('.longboxsmall').hide()[0].disabled = 'disabled'; 
}); 

o si hay más de uno, se puede utilizar para establecer each() todos ellos:

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show() 
      .find('.longboxsmall').each(function() { 
       this.style.display = 'none'; 
       this.disabled = 'disabled'; 
      }); 
}); 
5
$(element).prop('disabled', true); //true|disabled will work on all 
$(element).attr('disabled', true); 
element.disabled = true; 
element.setAttribute('disabled', true); 

Todo lo anterior son soluciones perfectamente válidas. Elija el que mejor se adapte a sus necesidades.

+0

La pregunta real aquí es "¿Cómo puedo también agregar el atributo deshabilitado a la entrada?" con la palabra clave "también". Lo que significa que OP sabe cómo hacer el resto, todo lo que realmente se le pide es cómo establecer el atributo deshabilitado. – user1596138

10

Si está utilizando jQuery, existen algunas formas diferentes de configurar el atributo deshabilitado.

var $element = $(...); 
    $element.prop('disabled', true); 
    $element.attr('disabled', true); 

    // The following do not require jQuery 
    $element.get(0).disabled = true; 
    $element.get(0).setAttribute('disabled', true); 
    $element[0].disabled = true; 
    $element[0].setAttribute('disabled', true); 
+0

¿Qué pasa con '$ element.eq (0) [0] .disabled = true;'? :-P – qwertynl

+1

Sí, eso es avanzado para mí, no voy tan lejos para mejorar el rendimiento. – iConnor

+0

+1. Aunque es un poco redundante. Si va a tratar con una NodeList/matriz de elementos, es una tontería seleccionarlos por el índice así. La iteración o simplemente seleccionar solo el elemento que necesita tiene más sentido. – user1596138

32

código trabajando de mis fuentes:

HTML MUNDO

<select name="select_from" disabled>...</select> 

JS MUNDO

var from = jQuery('select[name=select_from]'); 

//add disabled 
from.attr('disabled', 'disabled'); 



//remove it 
from.removeAttr("disabled"); 
+1

Como nota para las personas que vienen desde Google, directamente desde [jQuery] (http://api.jquery.com/attr/#attr1): 'A partir de jQuery 1.6, el método .attr() devuelve indefinido para los atributos que no han sido establecidos. Para recuperar y cambiar las propiedades DOM como el estado marcado, seleccionado o deshabilitado de los elementos del formulario, use el método .prop() –

Cuestiones relacionadas