专注于文本框不会在FF后警告?

时间:2011-04-22 17:13:33

标签: javascript jquery asp.net

我正在使用java脚本进行长度验证。如果输入的长度很短,我会显示一个警告,之后我想将焦点设置回文本字段。它在IE中工作但不在FF中工作。我在谷歌搜索了很多,但没有解决方案可以工作PLZ指南并帮助我。

function IsLengthOK(_title,_control,_length)
        {
               if(_control.value.length < _length)
                {   
                   alert("'"+ _title +"'" + " must be minimum "+_length+"  characters in length");                                                                                            
                   document.getElementById('txtUserName').focus();

                   return(false);  
                }
        }

我在文本框的模糊事件中调用此函数:

if(IsLengthOK("Registration Username",this,6))
        {
       // do something next.            
        }

我的文本框的HTML是:

<input id="txtUserName" type="text" tabindex="1" name="txtUserName" style="background: none repeat scroll 0% 0% white;">

3 个答案:

答案 0 :(得分:3)

function IsLengthOK(_title,_control,_length) {
  if(_control.value.length < _length) {   
    alert("'" + _title + "'" + " must be minimum " + _length + " characters in length");
    setTimeout(function() {
      document.getElementById('txtUserName').focus();
    }, 0);
    return false;
  }
}

这在我的Firefox中有效。在setTimeout调用后,它将关注对象#txtUserName。

答案 1 :(得分:1)

在Firefox 4中它适用于我。

jsFiddle

以下是对您的功能的建议重写...

function IsLengthOK(_title, _control, _length) {
    if (_control.value.length < _length) {
        alert("'" + _title + "'" + " must be minimum " + _length + "  characters in length");
        _control.focus();
        return false;
    }
    return true;
}

jsFiddle

  • 您正在传递对元素的引用,但随后再次选择它。没有理由这样做。它只会使维护更加困难。当它可以更容易灵活时,它还会将该功能绑定到您的一个元素。
  • 您在括号中返回false。这不是必要的。此外,如果条件为真,则返回false,因此它会有理由否则应该返回true(而不是undefined)。
  • 如果你有一堆像这样的验证实用程序函数,那么将它们命名为Validator对象的方法可能是个好主意。例如。
  • 为什么用_为变量添加前缀?你应该放弃它们。

答案 2 :(得分:0)

而不是使用document.getElementById,就像你在这里一样:

document.getElementById('txtUserName').focus();

使用jquery选择器然后提取原始元素,就像这样。

$('#txtUserName')[0].focus();