HTML需要表单中的只读输入

问题描述 投票:31回答:12

我正在制作一张表格。在一个input标签上是一个OnClick事件处理程序,它打开一个弹出窗口,你可以选择一些东西,然后自动填充input标签。

该输入标签也是readonly,因此只输入正确的数据。

这是input标签的代码:

<input type="text" name="formAfterRederict" id="formAfterRederict" size="50" required readonly="readonly" OnClick="choose_le_page();"  />

required属性在Chrome中不起作用。但这个领域是必需的。

有谁知道我怎么能让它发挥作用?

forms html5 google-chrome readonly required-field
12个回答
84
投票

我和你的要求相同,我想出了一个简单的方法。如果你想要“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>

1
投票

Requiredreadonly不能一起工作。

但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正在显示点击对话框。


0
投票

必需和readonly不能一起工作。

虽然您可以像这样输入两个输入:

<input id="One" readonly />
<input id="Two" required style="display: none" /> //invisible

并将值Two更改为输入One内的值。


-1
投票

  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>

31
投票

readonly字段不能具有required属性,因为它通常假设它们已经具有某些值。


12
投票

这是设计的。根据official HTML5 standard drafts,“如果在输入元素上指定了readonly属性,则该元素为barred from constraint validation。” (例如,不会检查其值。)


10
投票

删除readonly并使用功能

<input type="text" name="name" id="id" required onkeypress="return false;" />

它可以按你的需要工作。


5
投票

是的,这个问题有一个解决方法。我是从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;
}

2
投票

如果有人只想从html中做到这一点,这对我有用。

<input type="text" onkeydown="event.preventDefault()" required />

1
投票

我认为这应该有所帮助。

<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>

1
投票

您可以为模板执行此操作:

<input required onfocus="unselect($event)" class="disabled">

这对你的js来说:

unselect(event){
    event.preventDefault();
    event.currentTarget.blur();
}

对于用户,输入将同时被禁用和需要,前提是您有一个禁用输入的css类。


1
投票

根据答案@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事件?

© www.soinside.com 2019 - 2024. All rights reserved.