防止无效用户输入的Javascript

防止无效用户输入的Javascript,javascript,jquery,Javascript,Jquery,我已经编写了一组javascript函数,允许我验证表单上的用户输入。我只想接受有效的输入,并强制执行以下行为: 当用户输入无效表单时,我会显示一个警报,并通知他们输入的值不正确。至关重要的是,表单中的原始(有效)值没有更改 仅当值已验证时,才会更改该值 例如,假设我只接受字段中的正整数 这是描述所需行为的事件序列 场景1(有效输入) 表单在输入字段中以有效默认值加载 用户类型的有效数字 更新输入字段值(按照正常形式行为) 场景2(无效输入) 表单在输入字段中以有效默认值加载 用户类型的编号无效

我已经编写了一组javascript函数,允许我验证表单上的用户输入。我只想接受有效的输入,并强制执行以下行为:

当用户输入无效表单时,我会显示一个警报,并通知他们输入的值不正确。至关重要的是,表单中的原始(有效)值没有更改

仅当值已验证时,才会更改该值

例如,假设我只接受字段中的正整数

这是描述所需行为的事件序列

场景1(有效输入)

  • 表单在输入字段中以有效默认值加载
  • 用户类型的有效数字
  • 更新输入字段值(按照正常形式行为)
  • 场景2(无效输入)

  • 表单在输入字段中以有效默认值加载
  • 用户类型的编号无效
  • 警报框显示为警报('无效值')
  • 输入字段值未更改(即,该值与用户输入无效数字之前的值相同)
  • [编辑]

    我目前面临的唯一问题(即这个问题的答案)是场景2,行动点4。更具体地说,这个问题退化为以下问题:

    如果我(以某种方式)确定用户输入的值无效,如何阻止字段值的更改。这就是我想回答的全部问题

    我也在做服务器端的检查,这个问题只是关于前端的——即,如果我确定某个字段(表单文本输入)的值不正确,则拒绝更改该值

    顺便说一句,我正在使用jQuery,并希望以一种将行为与显示分离的方式实现它(我认为这就是术语“不引人注目”的含义?)

    对于如何实施上述行为的任何建议,我们将不胜感激


    PS:我不想再为这个使用另一个jQuery插件。我应该能够使用jQuery+我已经编写的简单javascript验证函数。

    加载页面时,您不能创建一个隐藏的表单值或js变量,在其中存储字段的初始/默认值吗?当他们更改表单字段时,验证它,如果通过,则更新隐藏字段或js变量以匹配他们更新的字段

    当用户提供的输入未通过验证时,显示无效条目以及错误消息,然后将表单字段更新回您已保存的值,该值将是 默认值或输入的最后一个有效值

    编辑:
    请注意,这只是一个快速且(非常)肮脏的例子,说明了我在上面的答案中所解释的。如果您有很多输入,您可能会希望将值存储在关联数组中,而不是以隐藏的形式存储值,但这会让您很好地理解我的建议。我还强烈建议您不要使用警告框来通知无效答案

    <html>
    <head>
    <script type="text/javascript">
        function validate()
        {
            var field1 = document.getElementById("field1");
            var saved  = document.getElementById("field1_save");
            if (field1.value < 0 || field1.value > 10)
            {
                alert("Field1 value of " + field1.value + " is invalid");
    
                // Change the value back to the previous valid answer
                field1.value = saved.value;
                return false;
            }
    
            // Save the valid input
            saved.value = field1.value;
            return true;
        }
    </script>
    </head>
    
    <body>
    Test User Input
    
    <form name="form1"   id="form1" method="post">
    <input name="field1" id="field1" type="text" value="2" onblur="validate();"/>
    <input name="field1_save" id="field1_save" type="hidden" value="2" />
    
    <input name="btnSubmit" type="submit" value="Submit" />                             
    </form>
    </body>
    </html>
    
    
    函数验证()
    {
    var field1=document.getElementById(“field1”);
    var saved=document.getElementById(“field1_save”);
    如果(field1.value<0 | | field1.value>10)
    {
    警报(“+Field1.value+的Field1值无效”);
    //将该值更改回上一个有效答案
    field1.value=保存的.value;
    返回false;
    }
    //保存有效的输入
    saved.value=field1.value;
    返回true;
    }
    测试用户输入
    
    如果用户每次输入错误或输入错误的值时都会收到一个警告框,因为这会改变焦点,那么用户可能会感到恼火。我会在场地旁边贴个通知。是的,你可能是对的。但是,由于我不想更改值(我想保留旧的正确值),也许我可以在保留旧值的同时更改输入字段的背景色(以表明它未被接受)。另一方面,如果这个值被接受,我认为改变背景颜色(换成另一种颜色)来表示它被接受是很酷的。我认为如果颜色变化持续几秒钟,然后再变回白色,这将是一个有用的视觉线索。我希望有人读了这篇评论,并展示了如何做这样的事情:)你不应该只改变颜色来表示错误:始终使用描述性错误消息(例如,在无效输入上方)。顺便说一下,不要依赖JavaScript进行验证:它可能会被关闭/根本不可用。始终检查服务器端的输入!我想我在最初的问题中没有讲清楚。我将编辑我的问题以进一步澄清我的问题所在。具体来说,这个问题只涉及场景2,行为4。我不明白为什么RC的解决方案不能回答你的问题。毕竟,您必须(1)允许编辑字段中的当前值在用户输入数据时更改,(2)确定用户已完成输入数据,然后才能执行验证。当然,您可能希望验证用户输入的每个字符,而不是等待他完成,在这种情况下,您的javascript验证函数将在编辑字段的onChange事件中调用,而不是在onBlur事件中调用。我用一个示例更新了我的答案。希望这能更直接地回答你的问题。