Javascript 文本框中的焦点不跟随FF中的警报?
我正在用java脚本进行长度验证。如果输入长度较短,我会显示一个警报,然后我想在文本字段中重新设置焦点。它在IE中工作,但在FF中不工作。我已经在谷歌上搜索了很多,但没有一个解决方案可以工作plz指南和帮助我Javascript 文本框中的焦点不跟随FF中的警报?,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我正在用java脚本进行长度验证。如果输入长度较短,我会显示一个警报,然后我想在文本字段中重新设置焦点。它在IE中工作,但在FF中不工作。我已经在谷歌上搜索了很多,但没有一个解决方案可以工作plz指南和帮助我 function IsLengthOK(_title,_control,_length) { if(_control.value.length < _length) {
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;
}
- 您正在传递对元素的引用,但随后再次选择它。没有理由这么做。这只会使维护更加困难。它还将把该函数绑定到您的一个元素上,而这个元素可能更灵活
- 在括号中返回
。这是没有必要的。此外,如果条件为true,它将返回false
,因此它将有理由返回false
(而不是true
)未定义的
- 例如,如果您有一组这样的验证实用程序函数,那么最好将它们命名为
对象的方法验证器
- 为什么在变量前面加上
?你应该放下它们
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;
}
- 您正在传递对元素的引用,但随后再次选择它。没有理由这么做。这只会使维护更加困难。它还将把该函数绑定到您的一个元素上,而这个元素可能更灵活
- 在括号中返回
。这是没有必要的。此外,如果条件为true,它将返回false
,因此它将有理由返回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按钮时,焦点转到横幅中的图像。