How to disable an input type=text?
I want to disable writing in an input field of type text
using JavaScript, if possible.
The input field is populated from a databas开发者_JS百科e; that is why I don't want the user to modify its value.
document.getElementById('foo').disabled = true;
or
document.getElementById('foo').readOnly = true;
Note that readOnly
should be in camelCase to work correctly in Firefox (magic).
Demo: https://jsfiddle.net/L96svw3c/ -- somewhat explains the difference between disabled
and readOnly
.
If you know this when the page is rendered, which it sounds like you do because the database has a value, it's better to disable it when rendered instead of JavaScript. To do that, just add the readonly
attribute (or disabled
, if you want to remove it from the form submission as well) to the <input>
, like this:
<input type="text" disabled="disabled" />
//or...
<input type="text" readonly="readonly" />
If the data is populated from the database, you might consider not using an <input>
tag to display it. Nevertheless, you can disable it right in the tag:
<input type='text' value='${magic.database.value}' disabled>
If you need to disable it with Javascript later, you can set the "disabled" attribute:
document.getElementById('theInput').disabled = true;
The reason I suggest not showing the value as an <input>
is that, in my experience, it causes layout issues. If the text is long, then in an <input>
the user will need to try and scroll the text, which is not something normal people would guess to do. If you just drop it into a <span>
or something, you have more styling flexibility.
Get a reference to your input box however you like (eg document.getElementById('mytextbox')
) and set its readonly
property to true
:
myInputBox.readonly = true;
Alternatively you can simply add this property inline (no JavaScript needed):
<input type="text" value="from db" readonly="readonly" />
You can also by jquery:
$('#foo')[0].disabled = true;
Working example:
$('#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" />
You can get the DOM element and set disabled attribute to true/false.
If you use vue framework,here is a very easy demo.
let vm = new Vue({
el: "#app",
data() {
return { flag: true }
},
computed: {
btnText() {
return this.flag ? "Enable" : "Disable";
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input type="text" value="something" :disabled="flag" />
<input type="button" :value="btnText" @click="flag=!flag">
</div>
// CSS Markup
.disabled-input {
pointer-events: none;
}
// HTML
<input class="disabled-input" />
If you are looking for a purely CSS approach you can disabled it by giving the following property to the class.
精彩评论