Risposte:
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" />
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.
readonly(minuscolo) ancora non funziona in Firefox 52 su Ubuntu - dovrebbe essere il caso del cammello.
inputelemento con id="gate"e provo il tuo codice, che non sembra funzionare per me ...
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.
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" />
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" />