Disabilitare / abilitare un input con jQuery?


Risposte:


3810

jQuery 1.6+

Per modificare la disabledproprietà è necessario utilizzare la .prop()funzione.

$("input").prop('disabled', true);
$("input").prop('disabled', false);

jQuery 1.5 e precedenti

La .prop()funzione non esiste, ma è .attr()simile:

Imposta l'attributo disabilitato.

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

Per riattivare, utilizzare il metodo corretto .removeAttr()

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

In qualsiasi versione di jQuery

Puoi sempre fare affidamento sull'oggetto DOM effettivo ed è probabilmente un po 'più veloce delle altre due opzioni se hai a che fare solo con un elemento:

// assuming an event handler thus 'this'
this.disabled = true;

Il vantaggio di usare il .prop()o.attr() metodi è che è possibile impostare la proprietà per un gruppo di elementi selezionati.


Nota: in 1.6 esiste un .removeProp()metodo che suona molto simile removeAttr(), ma NON DOVREBBE ESSERE UTILIZZATO su proprietà native come'disabled' Estratto dalla documentazione:

Nota: non utilizzare questo metodo per rimuovere proprietà native come selezionate, disabilitate o selezionate. Questo rimuoverà completamente la proprietà e, una volta rimosso, non potrà più essere aggiunto all'elemento. Utilizzare invece .prop () per impostare queste proprietà su false.

In effetti, dubito che ci siano molti usi legittimi per questo metodo, gli oggetti di scena booleani sono fatti in modo tale che dovresti impostarli su false invece di "rimuoverli" come le loro controparti "attributo" in 1.5


9
A parte questo, ricorda che, se vuoi disabilitare TUTTI i controlli di input del modulo - incl. caselle di controllo, radio, textareas, ecc. - devi selezionare ':input', non solo 'input'. Quest'ultimo seleziona solo gli elementi <input> effettivi.
Cornel Masson,

35
@CornelMasson input,textarea,select,buttonè un po 'meglio da usare rispetto a :input- :inputpoiché un selettore è abbastanza inefficiente perché deve selezionare *quindi scorrere su ogni elemento e filtrare per tagname - se passi direttamente i 4 selettori di tagname è MOLTO più veloce. Inoltre, :inputnon è un selettore CSS standard, quindi tutti i guadagni in termini di prestazioni possibili querySelectorAllsono persi
gnarf

3
Ciò impedisce all'utente di accedervi o lo rimuove effettivamente dalla richiesta Web?
OneChillDude

4
L'utilizzo di sta .removeProp("disabled")causando il problema di "proprietà rimossa completamente e non aggiunta di nuovo", come sottolineato da @ThomasDavidBaker, nel caso di alcuni browser come Chrome, mentre funzionava bene su alcuni come Firefox. Dovremmo davvero stare attenti qui. Usa sempre .prop("disabled",false)invece
Sandeepan Nath il

6
Né .prop né .attr sono sufficienti per disabilitare gli elementi di ancoraggio; .prop non oscurerà nemmeno il 'controllo' (.attr lo fa, ma l'href è ancora attivo). Devi anche aggiungere un gestore eventi click che chiama preventDefault ().
Jeff Lowery,

61

Solo per il gusto di nuove convenzioni && che lo rendono adattabile in futuro (a meno che le cose non cambino drasticamente con ECMA6 (????):

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

e

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

12
Jikes! Perché $(document).on('event_name', '#your_id', function() {...})invece di $('#your_id').on('event_name', function() {...}). Come descritto nella documentazione di jQuery .on (), il primo utilizza la delega e ascolta tutti gli event_name eventi che compaiono documente li controlla per una corrispondenza #your_id. Quest'ultimo ascolta specificamente $('#your_id')solo gli eventi e si adatta meglio.
Peter V. Mørch,

23
Il primo funziona per gli elementi inseriti nel DOM in qualsiasi momento, il secondo solo per quelli esistenti in quel momento.
crazymykl,

1
@crazymykl Corretto ma non dovresti aggiungere elementi con un ID già presente sulla tua pagina.
SepehrM,

33
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

A volte è necessario disabilitare / abilitare l'elemento del modulo come input o textarea. Jquery ti aiuta a farlo facilmente impostando l'attributo disabilitato su "disabilitato". Ad esempio:

  //To disable 
  $('.someElement').attr('disabled', 'disabled');

Per abilitare l'elemento disabilitato devi rimuovere l'attributo "disabilitato" da questo elemento o svuotare la sua stringa. Ad esempio:

//To enable 
$('.someElement').removeAttr('disabled');

// OR you can set attr to "" 
$('.someElement').attr('disabled', '');

consultare: http://garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html


13
$("input")[0].disabled = true;

o

$("input")[0].disabled = false;

2
Ovviamente la domanda ha posto jQuery e questo sta cambiando lo stato in JavaScript, ma funziona.
basic6

1
Questo cambia lo stato in JavaScript, ma utilizza comunque un selettore jQuery per ottenere il primo input.
cjsimon,

3
Ma non credo che stiamo realizzando un'enciclopedia di jquery qui, se una risposta funziona, va bene
Sajjad Shirazy,

8

Puoi metterlo da qualche parte globale nel tuo codice:

$.prototype.enable = function () {
    $.each(this, function (index, el) {
        $(el).removeAttr('disabled');
    });
}

$.prototype.disable = function () {
    $.each(this, function (index, el) {
        $(el).attr('disabled', 'disabled');
    });
}

E poi puoi scrivere cose come:

$(".myInputs").enable();
$("#otherInput").disable();

3
Mentre avvolgere la funzionalità è utile, dovresti averlo usato prope non attr con la disabledproprietà per farlo funzionare correttamente (supponendo jQuery 1.6 o successivo).
Codice finito

1
@TrueBlueAussie Qual è il lato negativo dell'utilizzo attr? Uso il codice sopra riportato in alcuni progetti e, per quanto ricordo, funziona bene
Nicu Surdu,

1
Le ovvie eccezioni sono i controlli con proprietà dietro le quinte. Il più famoso è di checkedproprietà delle caselle di controllo. L'uso attrnon darà lo stesso risultato.
Codice finito

7

Se vuoi solo invertire lo stato corrente (come un comportamento pulsante di commutazione):

$("input").prop('disabled', ! $("input").prop('disabled') );

1
grazie, ho la stessa cosa per la levetta; $ ("input"). prop ('disabled', function (i, v) {return! v;});
Floww

5

Esistono molti modi per usarli per abilitare / disabilitare qualsiasi elemento :

Approccio 1

$("#txtName").attr("disabled", true);

Approccio 2

$("#txtName").attr("disabled", "disabled");

Se si utilizza jQuery 1.7 o versione successiva, utilizzare prop (), anziché attr ().

$("#txtName").prop("disabled", "disabled");

Se desideri abilitare qualsiasi elemento, devi solo fare l'opposto di quello che hai fatto per disabilitarlo. Tuttavia jQuery fornisce un altro modo per rimuovere qualsiasi attributo.

Approccio 1

$("#txtName").attr("disabled", false);

Approccio 2

$("#txtName").attr("disabled", "");

Approccio 3

$("#txtName").removeAttr("disabled");

Ancora una volta, se si utilizza jQuery 1.7 o versione successiva, utilizzare prop (), anziché attr (). Questo è. Ecco come abilitare o disabilitare qualsiasi elemento utilizzando jQuery.


2

Aggiornamento per il 2018:

Ora non c'è bisogno di jQuery ed è stato un po 'che document.querySelector o document.querySelectorAll(per più elementi) fanno quasi esattamente stesso lavoro di $, oltre a quelli più espliciti getElementById, getElementsByClassName,getElementsByTagName

Disabilitare un campo della classe "input-checkbox"

document.querySelector('.input-checkbox').disabled = true;

o più elementi

document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);

1
la domanda si pone specificamente su jQuery ... ma ugualmente la tua affermazione è corretta, e vale la pena sapere che jQuery non ha bisogno di essere usato per questo quando ci sono più elementi.
ADyson

2

È possibile utilizzare il metodo jQuery prop () per disabilitare o abilitare l'elemento del modulo o controllare dinamicamente utilizzando jQuery. Il metodo prop () richiede jQuery 1.6 e versioni successive.

Esempio:

<script type="text/javascript">
        $(document).ready(function(){
            $('form input[type="submit"]').prop("disabled", true);
            $(".agree").click(function(){
                if($(this).prop("checked") == true){
                    $('form input[type="submit"]').prop("disabled", false);
                }
                else if($(this).prop("checked") == false){
                    $('form input[type="submit"]').prop("disabled", true);
                }
            });
        });
    </script>

1

Disattivare:

$('input').attr('readonly', true); // Disable it.
$('input').addClass('text-muted'); // Gray it out with bootstrap.

Abilitare:

$('input').attr('readonly', false); // Enable it.
$('input').removeClass('text-muted'); // Back to normal color with bootstrap.

1

Disabilita true per il tipo di input:

Nel caso di un tipo di input specifico ( es. Input del tipo di testo )

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

Per tutti i tipi di tipo di input

$("input").attr('disabled', true);

1
Grazie, mi ha aiutato a isolare un nome di input. $("input[name=method]").prop('disabled', true);
Harry Bosh,

1

questo funziona per me

$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);

0

Ho usato la risposta di @gnarf e l'ho aggiunta come funzione

   $.fn.disabled = function (isDisabled) {
     if (isDisabled) {
       this.attr('disabled', 'disabled');
     } else {
       this.removeAttr('disabled');
     }
   };

Quindi utilizzare in questo modo

$('#myElement').disable(true);

0

2018, senza JQuery (ES6)

Disabilita tutto input:

[...document.querySelectorAll('input')].map(e => e.disabled = true);

Disabilita inputconid="my-input"

document.getElementById('my-input').disabled = true;

La domanda è con JQuery, è solo FYI.



0

Usa così,

 $( "#id" ).prop( "disabled", true );

 $( "#id" ).prop( "disabled", false );

-1
<html>
<body>

Name: <input type="text" id="myText">



<button onclick="disable()">Disable Text field</button>
<button onclick="enable()">Enable Text field</button>

<script>
function disable() {
    document.getElementById("myText").disabled = true;
}
function enable() {
    document.getElementById("myText").disabled = false;
}
</script>

</body>
</html>

1
Dalla coda delle recensioni : posso chiederti di aggiungere un altro contesto alla tua risposta. Le risposte di solo codice sono difficili da capire. Aiuterà il richiedente e i futuri lettori sia se è possibile aggiungere ulteriori informazioni nel tuo post.
RBT,

-1

In jQuery Mobile:

Per disabilitare

$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');

Per abilitare

$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');
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.