输入时限制HTML输入字段中的值?

z8dt9xmd  于 2022-12-16  发布在  其他
关注(0)|答案(5)|浏览(186)

在这个假设的页面中,我输入了以下内容:

<input type="number" min=1 max=9 required />
<input type="number" min=1 max=9 required />
<input type="number" min=1 max=9 required />
<input type="number" min=1 max=9 required />

字符串
令我困惑的是,我知道如果我将输入放在表单中并提交表单,它们是受限制的。
但如果你去拉小提琴:Fiddle
您可以轻松地键入100或-20或1-9范围之外的任何值。

是否有方法在输入时/不提交时限制输入字段中的值

(side问题:输入字段的最小/最大属性何时生效?是否仅在提交表单时生效?是否可以在不提交表单的情况下验证值?)

ymzxtsji

ymzxtsji1#

当您使用表单上的提交按钮时,Google Chrome似乎会强制执行最小/最大值。
我已经更新了你的示例,有3个提交按钮(相应的标签)...一个将强制验证,其他将显示错误,但无论如何提交。
http://jsfiddle.net/uatxcvzp/12/

<form>
    <input type="number" min="1" max="9" required />
    <input type="number" min="1" max="9" required />
    <input type="number" min="1" max="9" required />
    <input type="number" min="1" max="9" required />
    <br/>
    <br/><input type="button" value="Submit With No Forced Validation" onclick="this.form.submit();"/>
    <br/><input type="submit" value="Submit With No Forced Validation" onclick="this.form.submit();"/>
    <br/><input type="submit" value="Submit With Forced Validation"/>
</form>

Firefox中,验证会在字段模糊时发生,用红色高亮显示字段边框,并在悬停时显示一个工具提示来解释错误。使用任何一种提交方式都将停止并要求修复错误。
IE10中,当您尝试提交表单时,只有本机提交按钮会强制验证。
在iOS9.1上的Safari中,无论使用什么提交按钮/代码样式,它看起来都被完全忽略了。

11dmarpk

11dmarpk2#

试试这个:

$("input[type='number']").change(function() {
  var $this = $(this);
  var val = $this.val();
  var span = $(".error");
  if (val > 9 || val < 1) {
    
    span.text("value must be between 1 and 9");
  }else{
   span.text("");
  }
});
input {
  width: 40px;
  height: 40px;
  font-size: 1.4em;
}
.error {
  color: red;
  font-style: italic;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="number" min=1 max=9 required />
<input type="number" min=1 max=9 required />
<input type="number" min=1 max=9 required />
<input type="number" min=1 max=9 required />
<span class="error"></span>
ycggw6v2

ycggw6v23#

你这是为我工作

<input type="text" name="number" minlength='1' maxlength="9" required>
ql3eal8s

ql3eal8s4#

你可以试试下面的代码:

<input type="number" min=1 max=9 required onKeyDown="if(this.value.length==1) return false;" />
uplii1fm

uplii1fm5#

看起来它本身不可能是一个不受控制的组件,它需要成为一个受控制的组件-要么手动编写javascript/jQuery,要么使用一个库。
如果使用React,可以使用类似react-hook-form的代码,代码如下所示,具体请参见age输入。
完整文档如下:https://react-hook-form.com/api/useform/register

import * as React from "react";
import { useForm } from "react-hook-form";

export default function App() {
  const { register, handleSubmit } = useForm({
    defaultValues: {
      firstName: '',
      lastName: '',
      age: '',
    }
  });

  return (
    <form onSubmit={handleSubmit(console.log)}>
      <input {...register("firstName", { required: true })} placeholder="First name" />
      <input {...register("lastName", { minLength: 2 })} placeholder="Last name" />

      <input
        {...register("age", {
          validate: {
            positive: v => parseInt(v) > 0,
            lessThan200: v => parseInt(v) < 200,
          }
        })}
      />

      <input type="submit" />
    </form>
  );
}

相关问题