还有其他选项,如keydown,blur,change ...
“为什么”非常重要。非常感谢。
答案 0 :(得分:2)
onKeyUp
都会导致验证程序运行。如果使用@ APAD1提到的setTimeout
,这可能是可行的,但是根据时间,用户可以在验证例程之前离开该字段,并且取决于在验证例程之前提交的表单。这也可能很重。如果您可以验证单个按键并将其吞下,我通常只会使用onKeyUp
。如果您正在等待最终输入验证,请使用onChange
或onBlur
。
onChange
适用于由$(“:input”)选择器拾取的任何字段(例如,无线电,选择,SLE等)。如果您想要在离开时进行验证,这将非常有用,但只有在您重新关注字段并清除不良内容时才会有效。否则他们可以忽略错误并继续前进。如果他们从不重新更改内容,则验证不会触发。
onBlur
非常好,如果您想在输入完成后立即验证并且该字段失去焦点。我提醒您使用此功能,具体取决于您如何通知用户错误。如果你正在提醒或做一些重新聚焦这个领域的事情,那么你可以创建一个糟糕的,阻塞的用户体验。
作为一般的思考过程,最好对输入进行即时验证,但以非阻塞方式通知用户(例如,在字段旁边弹出一个div或其他东西)。在发送信息之前,始终要对整个表单进行最终验证,因为在某些情况下,用户可能会忽略验证消息,然后发送错误信息。
答案 1 :(得分:1)
在我看来,取决于项目,onKeyUp是更好的解决方案。这是因为您可以给用户半即时指示他们的输入是否有效(在输入完成后在输入旁边添加绿色复选标记或红色“X”),而使用onChange / blur,他们没有看到验证,直到他们退出输入。
然而,你显然不希望它在keyUp上立即验证,因为它会很烦人,所以我发现解决这个问题的最好方法是使用带有计时器的keyUp,这样它就不会在他们停止输入后1-2秒验证。
你可以这样做:
var doneTypingInterval = 1000; //Validation delay time in ms
$('input').keyup(function(){
clearTimeout(typingTimer);
typingTimer = setTimeout(validationFunction, doneTypingInterval); //replace validationFunction with the name of your function
});
答案 2 :(得分:1)
onChange仅适用于某些类型的元素(例如<SELECT>
。)。
onKeyUp将使用每个按键进行评估,这是“重”
blur()
可能更好,因为每次离开某个字段时都会触发它。但是当你还在现场并单击提交按钮时呢?
因此,onsubmit是最好的解决方案 - 或两者的结合。评估不同字段的不同方式并在单击提交后再次验证
没有问题