繁体   English   中英

等待用户输入并确认不起作用

[英]Wait for user input and validate not working

我试图创建一个检查输入字段有效性的函数,但遇到一个问题,即如果我输入得太快,然后按Tab,它将不会触发该事件并且该字段未经验证。 我已经尝试了几种键组合,键组合,模糊,焦点和聚焦的组合,但是没有任何效果。

我以前使用过模糊处理,但是模糊处理的问题是在他们的电子邮件地址的最后一个输入中,它不会触发,因为他们不应该远离电子邮件并模糊该框。

这是我当前正在使用的代码。 它在我等待时起作用,但是如果我键入“ John”然后立即点击选项卡,它将无法对其进行验证。

$(function()
{
    var timer;
    // First name
    $('input[name="firstName"]').on('keydown',function(event)
    {
            clearTimeout(timer);
            timer = setTimeout(function() 
            {
                validate(/^[A-Za-z]*$/, 'firstName', 'firstName')
            }, 800);
    });
    // Last name
    $('input[name="lastName"]').on('keydown',function(event){
            clearTimeout(timer);
            timer = setTimeout(function() 
            {
                validate(/^[A-Za-z]*$/, 'lastName', 'lastName')]
            }, 800);
    });
    // Email
    $('input[name="email"]').on('keydown',function(event){
            clearTimeout(timer);
            timer = setTimeout(function() 
            {
                validate(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, 'email', 'email')
            }, 800);
    });
}

关于我应该做什么的任何想法?

立即在模糊时运行该功能。 一种方法是将0与setTimeout一起使用,这是将其分解为函数调用并调用该函数的更好方法。

$('input[name="firstName"]').on('keydown blur',function(event)
{
        clearTimeout(timer);
        timer = setTimeout(function() 
        {
            validate(/^[A-Za-z]*$/, 'firstName', 'firstName')
        }, event.type==="blur" ? 0 : 800 );
});

其他人已经给出了解决问题的方法,但是有一些重构可以使您自己更轻松地进行此操作。 由于看起来每个事件处理程序基本上都在做相同的事情,因此您可以分离出验证并只为表单委托一个单独的事件处理程序,该事件处理程序委派给所有子输入,从而也为您提供了更高的性能(更少的事件处理程序)。

var validations = {
  firstName: /^[A-Za-z]*$/,
  lastName: /^[A-Za-z]*$/, 
  email: ...
};

$('form').on('keypress input change blur', 'input[name]', function(event) {
  clearTimeout(timer);
  timer = setTimeout(function() {
    key = e.name;
    validate(validations[key], key, key);
  }, event.type in ['blur', 'input', 'change'] ? 0 : 800 );
});

您也可以在blur事件上验证该字段。 当字段失去焦点时(例如,您跳至下一个字段时)会触发模糊。

可能像:

$('input[name="firstName"]').on('keydown',function(event)
{
        clearTimeout(timer);
        timer = setTimeout(function() 
        {
            validate(/^[A-Za-z]*$/, 'firstName', 'firstName')
        }, 800);
}).on('blur',function(event)
{
        clearTimeout(timer);
        validate(/^[A-Za-z]*$/, 'firstName', 'firstName');
});

使用keyupkeypress而不是keydown 在输入实际进入控件之前会触发keydown ,因此该值尚未更新。 输入值后, keyupkeypress都会触发。

更妙的是,也要绑定到inputchange 当用户通过复制和粘贴或拖放输入输入内容时,这将涵盖您的基础。

$('input[name="firstName"]').on('keypress input change', function(event)
{
    validate(/^[A-Za-z]*$/, 'firstName', 'firstName')
});

像您一直在进行的那样,对模糊进行验证,然后在表单提交中再次验证,以确保您获得最后一个字段以及由于跳格太快而未验证的任何字段。 由于您是在客户端进行操作,因此处理时间非常短。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM