【问题标题】:How can I maintain focus on text box being validated without locking other text boxes?如何在不锁定其他文本框的情况下保持对正在验证的文本框的关注?
【发布时间】:2011-09-27 11:58:07
【问题描述】:

这是我正在使用的验证方法的示例:

 if(currentFieldCategory=='e')
    {
        var atpos=currentFieldValue.indexOf("@");
        var dotpos=currentFieldValue.lastIndexOf(".");
        if (atpos<1 || dotpos<atpos+2 || dotpos+2>=currentFieldValue.length) 
        {
            echo('Please enter a valid email address');
    currentField.focus();   
            return 'Please enter a valid email address';
        } 
    }

如果用户没有输入有效的电子邮件,则会触发错误消息。使用 currentField.focus();焦点停留在当前正在验证的文本框上,但所有其他文本框都被锁定,直到输入正确的数据。

我想知道是否有一种方法可以在不锁定其他文本框的情况下保持对当前文本框的关注(即用户仍然可以单击其他文本框)。因为我的验证对用户输入和表单提交都有效,所以即使当前文本框不包含正确的数据,用户也可以点击其他文本框。

有人可以帮忙吗?

谢谢,

尼克

【问题讨论】:

    标签: javascript forms validation


    【解决方案1】:

    您的要求似乎是矛盾的:您不能在一个输入中“保持焦点”同时允许用户点击其他输入。

    更常见的验证技术是onchange 或onblur,如果特定字段验证失败,则将其背景设置为不同颜色,和/或在其旁边显示错误消息或其他内容。然后用户知道他们需要返回哪些字段,但他们仍然可以先输入其他字段。

    话虽如此,如果您真的热衷于关注焦点的想法,也许您只能在用户第一次尝试离开该领域时设置焦点。如果他们再次尝试离开场地,请允许。

    // global (or at least a higher scope variable) to keep track of which
    // fields have failed; I assume your fields all have IDs set
    var invalidFields = {};
    
    
    // within your validation function
    if(currentFieldCategory=='e')
    {
       var atpos=currentFieldValue.indexOf("@");
       var dotpos=currentFieldValue.lastIndexOf(".");
       if (atpos<1 || dotpos<atpos+2 || dotpos+2>=currentFieldValue.length) 
       {
          echo('Please enter a valid email address');
          // NEW IF TEST
          // only set focus if this field didn't already fail validation
          if (!invalidFields[currentField.id]) {
            invalidFields[currentField.id] = true;
            currentField.focus();
          }
          return 'Please enter a valid email address';
       }
       invalidFields[currentField.id] = false;
    }
    

    注意:新 if 测试中的表达式 !invalidFields[currentField.id] 如果 invalidFields 没有为 currentField 的 id 定义(尚未)键,或者它确实定义了对应的键,则表达式为 true值为假。即,如果它以前从未被验证过,或者如果最后一次验证它通过了。

    (顺便说一句,您应该研究使用正则表达式验证格式,而不是手动比较第一个“@”与最后一个“.”的位置。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-15
      • 2011-10-08
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      相关资源
      最近更新 更多