我正在制作一张表格。在一个input
标签上是一个OnClick
事件处理程序,它打开一个弹出窗口,你可以选择一些东西,然后自动填充input
标签。
该输入标签也是readonly
,因此只输入正确的数据。
这是input
标签的代码:
<input type="text" name="formAfterRederict" id="formAfterRederict" size="50" required readonly="readonly" OnClick="choose_le_page();" />
但required
属性在Chrome中不起作用。但这个领域是必需的。
有谁知道我怎么能让它发挥作用?
我和你的要求相同,我想出了一个简单的方法。如果你想要“readonly”字段也是“必需”(基本HTML不支持),并且你觉得懒得添加自定义验证,那么只需使用jquery以这种方式读取字段:
<input type="text" class="readonly" required />
<script>
$(".readonly").keydown(function(e){
e.preventDefault();
});
</script>
编辑
正如@Ed Bayiates在评论中指出的那样,您还可以像这样添加paste处理程序来阻止默认:
<input type="text" class="readonly" required />
<script>
$(".readonly").on('keydown paste', function(e){
e.preventDefault();
});
</script>
Required
和readonly
不能一起工作。
但readonly可以替换为以下结构:
<input type="text"
onkeydown="return false;"
style="caret-color: transparent !important;"
required>
1)onkeydown
将停止使用数据进行操纵
2)style="caret-color: transparent !important;"
将隐藏光标。
3)如果您的输入没有任何事件,您可以添加style="pointer-events: none;"
,但这不是我的情况,因为我使用了Month Picker
。我的Month picker
正在显示点击对话框。
必需和readonly不能一起工作。
虽然您可以像这样输入两个输入:
<input id="One" readonly />
<input id="Two" required style="display: none" /> //invisible
并将值Two
更改为输入One
内的值。
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>
readonly
字段不能具有required
属性,因为它通常假设它们已经具有某些值。
这是设计的。根据official HTML5 standard drafts,“如果在输入元素上指定了readonly
属性,则该元素为barred from constraint validation。” (例如,不会检查其值。)
删除readonly
并使用功能
<input type="text" name="name" id="id" required onkeypress="return false;" />
它可以按你的需要工作。
是的,这个问题有一个解决方法。我是从https://codepen.io/fxm90/pen/zGogwV网站找到的。
解决方案如下。
HTML文件
<form>
<input type="text" value="" required data-readonly />
<input type="submit" value="Submit" />
</form>
CSS文件
input[data-readonly] {
pointer-events: none;
}
如果有人只想从html中做到这一点,这对我有用。
<input type="text" onkeydown="event.preventDefault()" required />
我认为这应该有所帮助。
<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>
您可以为模板执行此操作:
<input required onfocus="unselect($event)" class="disabled">
这对你的js来说:
unselect(event){
event.preventDefault();
event.currentTarget.blur();
}
对于用户,输入将同时被禁用和需要,前提是您有一个禁用输入的css类。
根据答案@KanakSinghal但没有阻止所有键和阻止cut
事件
$('.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" />
附:有人知道cut
事件转换为copy
事件?