Aggiungi l'attributo disabilitato all'elemento di input utilizzando Javascript


141

Ho una casella di input e voglio che sia disabilitata e allo stesso tempo nasconderla per evitare problemi durante il porting del mio modulo.

Finora ho il seguente codice per nascondere il mio input:

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

Questo è l'input che viene nascosto di conseguenza:

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

Come posso anche aggiungere l'attributo disabilitato all'input?

Risposte:


306

$("input").attr("disabled", true); a partire da ... non lo so più.

È dicembre 2013 e non ho davvero idea di cosa dirti.

Prima era sempre .attr(), poi lo era sempre .prop(), quindi sono tornato qui, ho aggiornato la risposta e l'ho resa più accurata.

Poi, un anno dopo, jQuery ha cambiato idea di nuovo e non voglio nemmeno tenerne traccia.

Per farla breve, a partire da ora, questa è la risposta migliore: "puoi usare entrambi ... ma dipende".

Dovresti invece leggere questa risposta: https://stackoverflow.com/a/5876747/257493

E le loro note di rilascio per quella modifica sono incluse qui:

Né .attr () né .prop () dovrebbero essere usati per ottenere / impostare il valore. Utilizzare invece il metodo .val () (sebbene l'utilizzo di .attr ("value", "somevalue") continuerà a funzionare, come prima di 1.6).

Riepilogo dell'utilizzo preferito

Il metodo .prop () dovrebbe essere usato per attributi / proprietà booleane e per proprietà che non esistono in HTML (come window.location). Tutti gli altri attributi (quelli che puoi vedere nel codice HTML) possono e devono continuare a essere manipolati con il metodo .attr ().

O in altre parole:

".prop = materiale non documentale"

".attr" = documento

...

Possiamo tutti imparare una lezione qui sulla stabilità delle API ...


3
+1 per aver reso il testo dell'aggiornamento abbastanza grande da consentirmi di prestare attenzione
Vael Victus,

@VaelVictus Non così in fretta. Mi dispiace dire che l'hanno cambiato di nuovo un anno dopo aver pubblicato questo ... e ho dimenticato questa risposta. Leggi questa risposta: stackoverflow.com/a/5876747/257493
Incognito

1
Quella differenziazione documento / non documento tra .prop e .attr sono infinitamente utili e non ho mai visto il contesto inquadrato in un modo così succinto prima. Molto apprezzato!
creazioni senza rivali

51

Codice funzionante dalle mie fonti:

MONDO 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");

2
Come nota per le persone che vengono qui da Google, direttamente da 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

Se stai usando jQuery, ci sono diversi modi per impostare l'attributo disabilitato.

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);

Che dire $element.eq(0)[0].disabled = true;? :-P
qwertynl

1
Sì, è avanzato per me, non vado così lontano per migliorare le prestazioni.
iConnor

+1. Anche se è un po 'ridondante. Se hai a che fare con una NodeList / matrice di elementi, è sciocco selezionarli dall'indice in questo modo. Iterazione o semplicemente selezionando solo l'elemento di cui hai bisogno ha più senso.

13
$(element).prop('disabled', true); //true|disabled will work on all
$(element).attr('disabled', true); 
element.disabled = true;
element.setAttribute('disabled', true);

Tutti i precedenti sono soluzioni perfettamente valide. Scegli quello più adatto alle tue esigenze.


1
Grazie per aver fornito una soluzione che non richiede jQuery.
Elias Zamaria,

12

È possibile ottenere l'elemento DOM e impostare direttamente la proprietà disabilitata.

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

o se ce n'è più di uno, puoi usarli each()per impostarli tutti:

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

5

Usa il attr()metodo di jQuery

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

3
e rimuovere lo stato disabilitato usando.removeAttr('disabled');
ruhong il

2

Dal momento che la domanda era: come fare questo con JS, sto fornendo un'implementazione JS alla vaniglia.

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";
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.