我可以用一个函数验证并防止不同输入的数字超过某个值吗



我使用的是这个脚本:

let validate = function(e) {
let t = e.value;
e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf(".")) + t.substr(t.indexOf("."), 4)) : t;
}

老实说,我知道第一部分说我们需要一个数字或0,而不是100%确定第二部分是什么,但第三部分限制在小数点后3位。但我也想加一条,150以上的数字也不能加(但可以是149.999(。用这个可以吗?

如果我想对7个不同的输入进行不同的验证(例如,有些输入的数字可以达到10,而另一些输入的数字只能小于1,而另一个输入的数字则可以达到150(。我是否必须为这些输入中的每一个建立一个单独的验证,或者我是否可以通过它们的#ID将它们附加在这里?

e似乎已输入。所以你有不同的可能性

  1. 为验证函数中的每个输入都有一个固定的规则集

    function validate(e) {
    switch (e.id) {
    case "input_1":
    //do validiations for input 1
    break;
    case "input_2":
    //do validation for input 2
    break;
    default:
    //no rules for all others 
    break;
    }
    }
    
  2. 使用一组可能的约束条件,制定一种更通用的方法

    <input type="number" data-maxvalue="150"/>
    <input type="number" data-maxdigits="3"/>
    <input type="number" data-minvalue="5" data-maxvalue="10"/>
    function validate(e) {
    if (e.dataset.minvalue && +(e.value) < +(e.dataset.minvalue)) {
    e.value = +(e.dataset.minvalue)
    }
    if (e.dataset.maxvalue && +(e.value) > +(e.dataset.maxvalue)) {
    e.value = +(e.dataset.maxvalue)
    }
    if (e.dataset.maxdigits) {
    var t = e.value;
    e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf(".")) + t.substr(t.indexOf("."), +(e.dataset.maxdigits)+1)) : t;          
    }
    ...
    }
    
  3. 使用内置的表单验证,它可能涵盖您的用例https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation

    <input type="number" required max="150" min="10" step="0.001">
    

您可以在validate函数中添加另一行代码,以测试值是否大于150

if (e.value > 150)
e.value = 150;

我不知道如何调用validate函数,但可以使用函数的第二个参数(let validate = function(e, max)(来设置最大值。

相关内容

  • 没有找到相关文章

最新更新