Agregar atributo deshabilitado al elemento de entrada usando Javascript

141

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

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

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

Esta es la entrada que se oculta como resultado:

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

¿Cómo puedo agregar también el atributo deshabilitado a la entrada?

usuario342391
fuente

Respuestas:

306

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

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

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

Luego, un año después, jQuery volvió a cambiar de opinión y ni siquiera quiero hacer un seguimiento de esto.

En pocas palabras, en este momento, esta es la mejor respuesta: "puede usar ambos ... pero depende".

En su lugar, debería leer esta respuesta: https://stackoverflow.com/a/5876747/257493

Y sus notas de lanzamiento para ese cambio se incluyen aquí:

Ni .attr () ni .prop () deben usarse para obtener / establecer el valor. Use el método .val () en su lugar (aunque usar .attr ("value", "somevalue") continuará funcionando, como lo hizo antes de 1.6).

Resumen de uso preferido

El método .prop () debe usarse para atributos / propiedades booleanas 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 seguir siendo manipulados con el método .attr ().

O en otras palabras:

".prop = cosas que no son documentos"

".attr" = material del documento

... ...

¿Podemos todos aprender una lección aquí sobre la estabilidad API ...

Incógnito
fuente
3
+1 por hacer que el texto de actualización sea lo suficientemente grande como para que yo le preste atención
Vael Victus
@VaelVictus No tan rápido. Lamento decir que lo han cambiado nuevamente un año después de que publiqué esto ... y olvidé esta respuesta. Lea esta respuesta: stackoverflow.com/a/5876747/257493
Incognito
1
Esa diferenciación documento / no documento entre .prop y .attr es infinitamente útil y nunca he visto el contexto enmarcado de una manera tan sucinta antes. ¡Muy apreciado!
creaciones inigualables
51

Código de trabajo de mis fuentes:

MUNDO HTML

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

JS WORLD

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

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



//remove it
from.removeAttr("disabled");
Mircea Stanciu
fuente
2
Como una nota para las personas que vienen aquí desde Google, directamente desde jQuery :As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method
Erenor Paz
16

Si está utilizando jQuery, existen diferentes formas 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);
iConnor
fuente
¿Qué hay de $element.eq(0)[0].disabled = true;? :-P
qwertynl
1
Sí, eso es muy avanzado para mí, no voy tan lejos para mejorar el rendimiento.
iConnor
+1. Aunque es un poco redundante. Si va a tratar con una NodeList / matriz de elementos, es una tontería seleccionarlos por el índice de esa manera. La iteración o simplemente seleccionar solo el elemento que necesita tiene más sentido.
13
$(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.


fuente
1
Gracias por proporcionar una solución que no requiere jQuery.
Elias Zamaria
12

Puede obtener el elemento DOM y establecer la propiedad deshabilitada directamente.

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

o si hay más de uno, puede usar each()para configurarlos todos:

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').each(function() {
               this.style.display = 'none';
               this.disabled = 'disabled';
          });
});
usuario113716
fuente
5

Solo usa el attr()método de jQuery

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled');
Gabe
fuente
3
y eliminar el estado deshabilitado usando.removeAttr('disabled');
ruhong
2

Como la pregunta era cómo hacer esto con JS, estoy proporcionando una implementación JS de vainilla.

var element = document.querySelector(".your-element-class-goes-here");
// it's a good idea to check whether the element exists
if (element != null && element != undefined) {
  element.disabled = "disabled";
}

Viktor
fuente