文本框中的焦点不在FF中的警报之后

focus in textbox not going after alert in FF?

本文关键字:之后 FF 焦点 文本      更新时间:2023-09-26

我正在用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;">
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。

它在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。这是没有必要的。此外,如果条件为true,它将返回false,因此它将理所当然地返回true(而不是undefined(
  • 如果您有一堆这样的验证实用程序函数,那么将它们命名为Validator对象的方法可能是一个好主意
  • 为什么在变量前面加上_?你应该放下它们

不要像现在这样使用document.getElementById

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

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

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