Javascript 文本框中的焦点不跟随FF中的警报?

Javascript 文本框中的焦点不跟随FF中的警报?,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我正在用java脚本进行长度验证。如果输入长度较短,我会显示一个警报,然后我想在文本字段中重新设置焦点。它在IE中工作,但在FF中不工作。我已经在谷歌上搜索了很多,但没有一个解决方案可以工作plz指南和帮助我 function IsLengthOK(_title,_control,_length) { if(_control.value.length < _length) {

我正在用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);  
                }
        }
我的文本框的HTML是:

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

函数IsLengthOK(\u title,\u control,\u length){
如果(_control.value.length<_length){
警报(““+”标题+“+”“+”必须是最小长度的“+”字符);
setTimeout(函数(){
document.getElementById('txtUserName').focus();
}, 0);
返回false;
}
}
这在我的Firefox中运行。调用
setTimeout
后,它将把焦点放在对象上。

函数IsLengthOK(_title,_control,_length){
如果(_control.value.length<_length){
警报(““+”标题+“+”“+”必须是最小长度的“+”字符);
setTimeout(函数(){
document.getElementById('txtUserName').focus();
}, 0);
返回false;
}
}

这在我的Firefox中运行。调用
setTimeout
后,它将把焦点放在object#txtUserName上。

它在Firefox4中运行良好

这里是一个建议重写您的函数

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;
}
函数IsLengthOK(_title,_control,_length){
如果(_control.value.length<_length){
警报(““+”标题+“+”“+”必须是最小长度的“+”字符);
_control.focus();
返回false;
}
返回true;
}

  • 您正在传递对元素的引用,但随后再次选择它。没有理由这么做。这只会使维护更加困难。它还将把该函数绑定到您的一个元素上,而这个元素可能更灵活
  • 在括号中返回
    false
    。这是没有必要的。此外,如果条件为true,它将返回
    false
    ,因此它将有理由返回
    true
    (而不是
    未定义的
  • 例如,如果您有一组这样的验证实用程序函数,那么最好将它们命名为
    验证器
    对象的方法
  • 为什么在变量前面加上
    ?你应该放下它们

它在Firefox4中对我很好

这里是一个建议重写您的函数

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;
}
函数IsLengthOK(_title,_control,_length){
如果(_control.value.length<_length){
警报(““+”标题+“+”“+”必须是最小长度的“+”字符);
_control.focus();
返回false;
}
返回true;
}

  • 您正在传递对元素的引用,但随后再次选择它。没有理由这么做。这只会使维护更加困难。它还将把该函数绑定到您的一个元素上,而这个元素可能更灵活
  • 在括号中返回
    false
    。这是没有必要的。此外,如果条件为true,它将返回
    false
    ,因此它将有理由返回
    true
    (而不是
    未定义的
  • 例如,如果您有一组这样的验证实用程序函数,那么最好将它们命名为
    验证器
    对象的方法
  • 为什么在变量前面加上
    ?你应该放下它们

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

document.getElementById('txtUserName').focus();
使用jquery选择器,然后提取原始元素,如下所示

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

不要使用
document.getElementById
,就像您在这里一样:

document.getElementById('txtUserName').focus();
使用jquery选择器,然后提取原始元素,如下所示

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


你的HTML是什么样子的?明确地txtUserName@Blazes请看我的编辑。@user576510,请停止使用“plz”。你的HTML是什么样子的?明确地txtUserName@Blazes请看我的编辑。@user576510,请停止使用“plz”。@Ronak,我试过了,但当我在警告框中单击“确定”时,焦点转到页面顶部横幅上的图像。是否与制表符顺序等有关?您将无法在
setTimeout
中访问
ele
,因为您以字符串形式传递函数,该字符串将为
eval()
'd在不同的上下文中。@Ronak为什么要引入一个全局变量,而你可以在那里创建一个匿名函数?@alex为什么要创建一个匿名函数,而你可以使用一个带有全局变量的元素?@Ronak,因为你有一个很好的封装函数,其中包含一个不必要的全局变量。@Ronak,我试过了,但当我在提醒框中点击ok时,焦点转到页面顶部横幅上的图像。是否与制表符顺序等有关?您将无法在
setTimeout
中访问
ele
,因为您以字符串形式传递函数,该字符串将为
eval()
'd在不同的上下文中。@Ronak为什么要引入一个全局变量,而你可以在那里创建一个匿名函数?@alex为什么要创建一个匿名函数,而你可以使用一个带有全局变量的元素?@Ronak,因为你有一个很好的封装函数,其中包含一个不必要的全局变量。相同的结果。当我按下警报框中的ok按钮时,焦点转到横幅中的图像。结果相同。当我按下警报框中的ok按钮时,焦点转到横幅中的图像。