哪个是使用jQuery验证输入的最佳方法? onChange / onKeyUp。或者其他什么?

时间:2014-09-05 18:29:54

标签: javascript jquery onchange onkeyup

有人可以解释哪两个是最好的,为什么?或者如果有更好的选择。

还有其他选项,如keydown,blur,change ...

“为什么”非常重要。非常感谢。

3 个答案:

答案 0 :(得分:2)

每次按键后,

onKeyUp都会导致验证程序运行。如果使用@ APAD1提到的setTimeout,这可能是可行的,但是根据时间,用户可以在验证例程之前离开该字段,并且取决于在验证例程之前提交的表单。这也可能很重。如果您可以验证单个按键并将其吞下,我通常只会使用onKeyUp。如果您正在等待最终输入验证,请使用onChangeonBlur

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是最好的解决方案 - 或两者的结合。评估不同字段的不同方式并在单击提交后再次验证

没有问题