Disattivazione e attivazione di un pulsante di input html


269

Quindi ho un pulsante come questo:

<input id="Button" type="button" value="+" style="background-color:grey" onclick="Me();"/>

Come posso disabilitarlo e abilitarlo quando voglio? Ho provato disabled="disable"ma riattivarlo è un problema. Ho provato a impostarlo di nuovo su false ma non l'ho abilitato.


Cosa intendi per riattivarlo? Una volta disattivato, non è possibile riattivarlo con lo stesso metodo Me()che spero tu sappia (perché è disattivato)
cjds

2
Quello che sto cercando di fare è disabilitare e abilitare il pulsante quando si verificano determinati eventi.
k.ken

Risposte:


494

Utilizzando Javascript

  • Disabilitazione di un pulsante html

    document.getElementById("Button").disabled = true;
    
  • Abilitazione di un pulsante html

    document.getElementById("Button").disabled = false;
    
  • Demo qui


Utilizzando jQuery

Tutte le versioni di jQuery precedenti alla 1.6

  • Disabilitazione di un pulsante html

    $('#Button').attr('disabled','disabled');
    
  • Abilitazione di un pulsante html

    $('#Button').removeAttr('disabled');
    
  • Demo qui

Tutte le versioni di jQuery dopo la 1.6

  • Disabilitazione di un pulsante html

    $('#Button').prop('disabled', true);
    
  • Abilitazione di un pulsante html

    $('#Button').prop('disabled', false);
    
  • Demo qui

PS Aggiornato il codice in base alle modifiche a jquery 1.6.1 . Come suggerimento, usa sempre i file jquery più recenti e il prop()metodo.


Ho bisogno degli attributi lì perché funzioni? like
disables

No, dentro $(document).readypuoi chiamare $('#Button').attr('disabled','disabled');. Questo disabiliterà il pulsante al caricamento della pagina. E quando si verificano determinati eventi, puoi chiamare $('#Button').removeAttr('disabled');per abilitarlo di nuovo ...
pale,

come aggiungere lo stile grigio se disabilitato?
Lei Yang

1
@LeiYang puoi aggiungere alcuni CSS come questo
palasн

Basta notare che vero e falso sono booleani, non stringhe, come ha scritto correttamente palash
marcolav

27

Poiché lo stai disabilitando in primo luogo, il modo per abilitarlo è impostare la sua disabledproprietà come false.

Per modificare la sua disabledproprietà in Javascript, usa questo:

var btn = document.getElementById("Button");
btn.disabled = false;

E ovviamente per disabilitarlo di nuovo, useresti trueinvece.

Dato che hai anche etichettato la domanda con jQuery, puoi usare il .propmetodo. Qualcosa di simile a:

var btn = $("#Button");
btn.prop("disabled", true);   // Or `false`

Questo è nelle versioni più recenti di jQuery. Il modo più vecchio per farlo è aggiungere o rimuovere un attributo in questo modo:

var btn = $("#Button");
btn.attr("disabled", "disabled");
// or
btn.removeAttr("disabled");

La semplice presenza della disabledproprietà disabilita l'elemento, quindi non è possibile impostarne il valore come "false". Anche quanto segue dovrebbe disabilitare l'elemento

<input type="button" value="Submit" disabled="" />

È necessario rimuovere completamente l'attributo o impostarne la proprietà.


cosa succede se voglio che il pulsante sia abilitato inizialmente e poi disabilitato in seguito; Ho anche provato enable = "true". L'abilitazione è la parola chiave corretta?
k.ken

2
@ k.ken No, la parola chiave è "disabilitata". Se desideri che il pulsante sia abilitato inizialmente, non inserire affatto l'attributo disabled. Basta usare <input type="button" value="Submit" />. E quando cambi lo stato, usa .prop("disabled", true);(o false)
Ian

10

Puoi farlo abbastanza facilmente con JavaScript semplice, senza librerie richieste.

Abilita un pulsante

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

Disabilita un pulsante

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

Non sono necessarie librerie esterne.



3
$(".btncancel").button({ disabled: true });

Qui "btncancel" è il nome della classe del pulsante.


0

Senza jQuery disabilitare l'input sarà più semplice

Button.disabled=1;


Essendo dubbioso, sono rimasto sorpreso dal fatto che funzioni effettivamente su Chrome, Edge, FF e Brave appena testati. Apparentemente non è una pratica consigliata (vedi: stackoverflow.com/a/3434388/1236837 ) quindi non è probabile che la userò, ma una scoperta interessante.
KellyCode

@KellyCode Sono d'accordo con te sul fatto che l'approccio OP in cui usa gli ID degli elementi non è buono in generale (forse accettabile per piccoli progetti o frammenti di codice leggibile)
Kamil Kiełczewski

0
 <!--Button Disable Script-->
    <script type="text/javascript">
        function DisableButton() {
            document.getElementById("<%=btnSave.ClientID %>").disabled = true;
        }
        window.onbeforeunload = DisableButton;
    </script>
    <!--Button Disable Script-->

0

Sebbene non sia direttamente correlato alla domanda, se salti su questa domanda cercando di disabilitare qualcosa di diverso dai tipici elementi di input button, input, textarea, la sintassi non funzionerà.

Per disabilitare un div o uno span, usa setAttribute

document.querySelector('#somedivorspan').setAttribute('disabled', true);

PS: Gotcha, chiamalo solo se intendi disabilitare. Un bug nella versione 83 di Chrome fa sì che questo venga sempre disabilitato anche quando il secondo parametro è falso.


0

Disattivazione / attivazione di un pulsante di immissione html con JavaScript:

(E reagisci con refs. Sostituisci "elementRef.current" con la selezione dell'elemento se non usi React)

 elementRef.current.setAttribute('disabled', 'disabled');

Abilitare:

 elementRef.current.removeAttribute('disabled');

-2

Questo funzionerà sicuramente.

Per disabilitare un pulsante

$('#btn_id').button('disable');

Per abilitare un pulsante

$('#btn_id').button('enable');

-6

Attenersi a php ...

Perché non consentire la visualizzazione del pulsante solo una volta soddisfatti i criteri di cui sopra.

<?
if (whatever == something) {
    $display = '<input id="Button" type="button" value="+" style="background-color:grey" onclick="Me();"/>';
    return $display;
}
?>
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.