问题
I'm making a form. And on one input
tag is an OnClick
event handler, which is opening a popup, where you can choose some stuff, and then it autofills the input
tag.
That input tag is also readonly
, so only right data will be entered.
This is the code of the input
tag:
<input type="text" name="formAfterRederict" id="formAfterRederict" size="50" required readonly="readonly" OnClick="choose_le_page();" />
But the required
attribute isn't working in Chrome. But the field is required.
Does anybody know how I can make it work?
回答1:
I had same requirement as yours and I figured out an easy way to do this. If you want a "readonly" field to be "required" also (which is not supported by basic HTML), and you feel too lazy to add custom validation, then just make the field read only using jquery this way:
<input type="text" class="readonly" required />
<script>
$(".readonly").keydown(function(e){
e.preventDefault();
});
</script>
EDIT
as @Ed Bayiates pointed in the comment you can also add paste handler to preventDefault like this:
<input type="text" class="readonly" required />
<script>
$(".readonly").on('keydown paste', function(e){
e.preventDefault();
});
</script>
回答2:
readonly
fields cannot have the required
attribute, as it's generally assumed that they will already hold some value.
回答3:
This is by design. According to the official HTML5 standard drafts, "if the readonly
attribute is specified on an input element, the element is barred from constraint validation." (E.g. its values won't be checked.)
回答4:
Remove readonly
and use function
<input type="text" name="name" id="id" required onkeypress="return false;" />
It works as you want.
回答5:
Yes, there is a workaround for this issue. I found it from https://codepen.io/fxm90/pen/zGogwV site.
Solution is as follows.
HTML File
<form>
<input type="text" value="" required data-readonly />
<input type="submit" value="Submit" />
</form>
CSS File
input[data-readonly] {
pointer-events: none;
}
回答6:
Required
and readonly
don't work together.
But readonly
can be replaced with following construction:
<input type="text"
onkeydown="return false;"
style="caret-color: transparent !important;"
required>
1) onkeydown
will stop manipulation with data
2) style="caret-color: transparent !important;"
will hide cursor.
3) you can add style="pointer-events: none;"
if you don't have any events on your input, but it was not my case, because I used a Month Picker
. My Month picker
is showing a dialog on click.
回答7:
If anyone wants to do it only from html, This works for me.
<input type="text" onkeydown="event.preventDefault()" required />
回答8:
I think this should help.
<form onSubmit="return checkIfInputHasVal()">
<input type="text" name="formAfterRederict" id="formAfterRederict" size="50" required readonly="readonly" OnClick="choose_le_page();" />
</form>
<script>
function checkIfInputHasVal(){
if($("#formAfterRederict").val==""){
alert("formAfterRederict should have a value");
return false;
}
}
</script>
回答9:
You can do this for your template:
<input required onfocus="unselect($event)" class="disabled">
And this for your js:
unselect(event){
event.preventDefault();
event.currentTarget.blur();
}
For a user the input will be disabled and required at the same time, providing you have a css-class for disabled input.
回答10:
Based on answer @KanakSinghal but without blocked all keys and with blocked cut
event
$('.readonly').keydown(function(e) {
if (e.keyCode === 8 || e.keyCode === 46) // Backspace & del
e.preventDefault();
}).on('keypress paste cut', function(e) {
e.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="readonly" value="test" />
P.S. Somebody knows as cut
event translate to copy
event?
回答11:
Required and readonly don't work together.
Although you can make two inputs like this:
<input id="One" readonly />
<input id="Two" required style="display: none" /> //invisible
And change the value Two
to the value that´s inside the input One
.
回答12:
function validateForm() {
var x = document.forms["myForm"]["test2"].value;
if (x == "") {
alert("Name missing!!");
return false;
}
}
<form class="form-horizontal" onsubmit="return validateForm()" name="myForm" action="" method="POST">
<input type="text" name="test1">
<input type="text" disabled name="test2">
<button type="submit">Submit</button>
</form>
来源:https://stackoverflow.com/questions/12777751/html-required-readonly-input-in-form