Come disabilitare il pulsante HTML usando JavaScript?


186

Ho letto che puoi disabilitare (rendere fisicamente non cliccabile) un pulsante HTML semplicemente aggiungendo disableal suo tag, ma non come un attributo, come segue:

<input type="button" name=myButton value="disable" disabled>

Poiché questa impostazione non è un attributo, come posso aggiungerla in modo dinamico tramite JavaScript per disabilitare un pulsante precedentemente abilitato?

Risposte:


274

Poiché questa impostazione non è un attributo

È un attributo

Alcuni attributi sono definiti come booleani, il che significa che puoi specificare il loro valore e lasciare fuori tutto il resto. cioè Invece di disabled = " disabled ", includi solo la parte in grassetto. In HTML 4, è necessario includere solo la parte in grassetto poiché la versione completa è contrassegnata come funzionalità con supporto limitato (anche se questo è meno vero ora di quando è stata scritta la specifica).

A partire da HTML 5, le regole sono cambiate e ora includi solo il nome e non il valore. Ciò non fa alcuna differenza pratica perché il nome e il valore sono gli stessi.

La proprietà DOM viene anche chiamata disableded è un valore booleano che accetta trueo false.

foo.disabled = true;

In teoria puoi anche foo.setAttribute('disabled', 'disabled');e foo.removeAttribute("disabled"), ma non mi fiderei di questo con le versioni precedenti di Internet Explorer (che sono notoriamente buggy quando si tratta di setAttribute).


Avrebbe senso fare entrambe le cose, cambiare la proprietà e impostare l'attributo o è solo un eccesso?
v010dya,

Cosa c'è fooin foo.disabled = true;? È l'id di quel pulsante?
Stack

@stack - Una variabile che contiene un riferimento all'elemento raccolto attraverso qualunque mezzo tu voglia (es. querySelector)
Quentin

146

disabilitare

document.getElementById("btnPlaceOrder").disabled = true; 

abilitare

document.getElementById("btnPlaceOrder").disabled = false; 

3
Per qualche motivo questo ha funzionato per me, anche se $('#btnPlaceOrder').disabled = false;non lo è.
levininja,

4
Ho usato $('#btnPlaceOrder')[0].disabled = falsecome il selettore jquery sembra restituire un array. Scrollata di spalle.
Freddo,

6
jquery! == javascript. jquery restituisce un selettore simile ad un array.
AnilRedshift,

@levininja, Chilly - $ ('# btnPlaceOrder'). prop ('disabled', false);
Dominik Späte,

22

È un attributo, ma booleano (quindi non ha bisogno di un nome, solo di un valore - lo so, è strano). È possibile impostare l'equivalente della proprietà in Javascript:

document.getElementsByName("myButton")[0].disabled = true;

2
Ha bisogno di un valore, è il nome di cui non ha bisogno. (Strano ma vero).
Quentin,

1
@ David: ricordo di averlo letto prima, risolto. È davvero strano e probabilmente avrebbe più senso se gli evidenziatori della sintassi lo onorassero correttamente :-)
Andy E

10

Prova quanto segue:

document.getElementById("id").setAttribute("disabled", "disabled");

4
Come ha detto David Dorward , questo non può essere fatto affidamento su un cross-browser e si dovrebbe usare invece l'equivalente di proprietà.
Andy E

9

Il modo ufficiale per impostare l' disabledattributo su un HTMLInputElementè questo:

var input = document.querySelector('[name="myButton"]');
// Without querySelector API
// var input = document.getElementsByName('myButton').item(0);

// disable
input.setAttribute('disabled', true);
// enable
input.removeAttribute('disabled');

Mentre la risposta di @ kaushar è sufficiente per abilitare e disabilitare un HTMLInputElement, ed è probabilmente preferibile per la compatibilità cross-browser a causa del bug storico di IE setAttribute, funziona solo perché le Elementproprietà shadowElement attributi . Se viene impostata una proprietà, il DOM utilizza il valore della proprietà per impostazione predefinita anziché il valore dell'attributo equivalente.

C'è una differenza molto importante tra proprietà e attributi. Un esempio di una HTMLInputElement proprietà vera è input.value, e di seguito dimostra come funziona l'ombreggiatura:

var input = document.querySelector('#test');

// the attribute works as expected
console.log('old attribute:', input.getAttribute('value'));
// the property is equal to the attribute when the property is not explicitly set
console.log('old property:', input.value);

// change the input's value property
input.value = "My New Value";

// the attribute remains there because it still exists in the DOM markup
console.log('new attribute:', input.getAttribute('value'));
// but the property is equal to the set value due to the shadowing effect
console.log('new property:', input.value);
<input id="test" type="text" value="Hello World" />

Questo è ciò che significa dire che le proprietà degli attributi ombra. Questo concetto si applica anche alle proprietà ereditate sulla prototypecatena:

Spero che ciò chiarisca qualsiasi confusione sulla differenza tra proprietà e attributi.


5

È ancora un attributo. Impostandolo su:

<input type="button" name=myButton value="disable" disabled="disabled">

... è valido.


1
Valido, ma le specifiche dicono che la sintassi dovrebbe essere evitata: w3.org/TR/html4/appendix/notes.html#hB.3.3
Quentin

2
Tutti i browser cercano disabilitato = "disabilitato", so che le specifiche dicono di evitarlo, ma non ho mai avuto problemi a impostare disabilitato = "disabilitato" o controllato = "controllato" o selezionato = "selezionato" ... Basta don ' t do disabled = "true" ... solo alcuni browser lo riconosceranno
Bob Fincheimer

Chiaramente non tutti i browser lo supportano: le specifiche non sarebbero così esplicite se non lo facessero. Semplicemente non sono più in uso comune.
Quentin,

1
A proposito, la domanda dice "come posso aggiungere questo in modo dinamico tramite JavaScript"
Quentin

Certo, ma la domanda continua a parlare di disabili non essere un attributo. La mia risposta è di dissiparlo e dire che puoi usarlo come attributo. È possibile anche utilizzare la proprietà DOM.
Oli,

4

Se hai l'oggetto pulsante, chiamato b: b.disabled=false;


3

Penso che il modo migliore potrebbe essere:

$("#ctl00_ContentPlaceHolder1_btnPlaceOrder").attr('disabled', true);

Funziona bene su più browser.


4
dovrebbe essere prop, no attr.
Antti Haapala,

1
la domanda è alla ricerca della soluzione js nativa
behradkhodayar,

0
<button disabled=true>text here</button>

Puoi comunque usare un attributo. Usa semplicemente l'attributo 'disabilitato' invece di 'valore'.


È disabled="disabled"o solo disabled. Qualsiasi valore di stringa equivale a "disabled", inclusi disabled="true"e disabled="false".
user4642212
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.