Come disabilitare un tipo di input = testo?


123

Desidero disabilitare la scrittura in un campo di input di tipo textutilizzando JavaScript, se possibile. Il campo di input viene popolato da un database; ecco perché non voglio che l'utente modifichi il suo valore.

Risposte:


172

Se lo sai quando viene eseguito il rendering della pagina, cosa che suona come te perché il database ha un valore, è meglio disabilitarlo durante il rendering invece di JavaScript. Per farlo, aggiungi l' readonlyattributo (o disabled, se vuoi rimuoverlo anche dall'invio del modulo) a <input>, in questo modo:

<input type="text" disabled="disabled" />
//or...
<input type="text" readonly="readonly" />

81
Non so perché questo ottiene voti, non risponde alla domanda. Ci aspettavamo risposte javascript.
— Sophie

3
@Sophie è il modo più corretto per il richiedente di farlo in base alla sua situazione, forse è necessario un cambio di titolo.
— Nick Craver

6
la modalità disabilitata impedisce gli eventi di clic nella casella di input, readonly no. FYI.
— knutole

Per fare in modo che il campo di input "readonly" SIA COME il campo "disabled", imposta 'style = "color: gray; background-color: # F0F0F0;"'. (questo era un commento a questa risposta )
— Jake Toronto

2
Tieni presente che i browser sono liberi di ignorare l'attributo "disabled" o "readonly" e non si dovrebbe fare affidamento su questo metodo per evitare che i dati vengano aggiornati in modo affidabile ... se l'elaborazione del codice lato server il modulo accetterà ancora un valore da quel campo e aggiornarlo, chiunque abbia abbastanza esperienza per creare il proprio modulo può aggirare questa "disabilitazione" ... questo è per comodità dell'interfaccia utente solo in un ambiente affidabile. Il vero modo per prevenirlo è con la logica lato server.
— Aaron Wallentine

206
document.getElementById('foo').disabled = true;

o

document.getElementById('foo').readOnly = true;

Nota che readOnlydovrebbe essere in camelCase per funzionare correttamente in Firefox (magia).

Demo: https://jsfiddle.net/L96svw3c/ - spiega in qualche modo la differenza tra disablede readOnly.


3
Questo ha funzionato per me. La versione di Jquery è $ ('input'). Prop ('disabled', true)
— Daniel Sun Yang

Sono in ritardo di sette anni su questo, ma c'è qualche differenza semantica tra questi due nel 2017?
— Jules

2
Non sei affatto in ritardo, la magia è ancora lì (: non ricordo su quali piattaforme ho provato allora, ma oggi readonly(minuscolo) ancora non funziona in Firefox 52 su Ubuntu - dovrebbe essere il caso del cammello.
— hudolejev

Perché questo non funziona per me? Ho creato un inputelemento con id="gate"e provo il tuo codice, che non sembra funzionare per me ...
— Voldemort's Wrath

21

Se i dati vengono popolati dal database, potresti considerare di non utilizzare un <input>tag per visualizzarli. Tuttavia, puoi disabilitarlo direttamente nel tag:

<input type='text' value='${magic.database.value}' disabled>

Se devi disabilitarlo con Javascript in un secondo momento, puoi impostare l'attributo "disabled":

document.getElementById('theInput').disabled = true;

Il motivo per cui suggerisco di non mostrare il valore come un <input>è che, nella mia esperienza, causa problemi di layout. Se il testo è lungo, <input>l'utente dovrà provare a scorrere il testo, cosa che le persone normali non immaginerebbero di fare. Se lo metti in un <span>o qualcosa del genere, hai più flessibilità nello stile.


3
Tieni presente che disabilitato può rendere il testo quasi illeggibile su alcuni browser. Potresti stare meglio con l'attributo readonly, ad esempio <input type = "text" value = "foo" readonly>
— Olly Hodgson,

7

Puoi anche da jquery:

$('#foo')[0].disabled = true;

Esempio di lavoro:

$('#foo')[0].disabled = true;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="foo" placeholder="placeholder" value="value" />


1
@Chani Poz Stai chiamando il setter js nativo sull'oggetto jquery, il risultato sarà un errore. $ ('# foo') [0] .disabled = true o $ ('# foo'). get (0) .disabled = true farà il lavoro
— Arek Kostrzeba

6

Ottieni un riferimento alla tua casella di input come preferisci (ad esempio document.getElementById('mytextbox')) e imposta la sua readonlyproprietà su true:

myInputBox.readonly = true;

In alternativa puoi semplicemente aggiungere questa proprietà in linea (non è necessario JavaScript):

<input type="text" value="from db" readonly="readonly" />

Se stai scrivendo HTML (al contrario di XHTML), sarebbe <input type = "text" value = "from db" readonly>
— Olly Hodgson
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.