1

可能会是一些非常明显的东西,我再也找不到了。但是,一如既往,我们将不胜感激任何帮助。

我的 javascript 错误消息和焦点设置适用于提交时的所有验证功能,但我无法让该字段通过 onblur 验证获得焦点。错误消息正确显示,但焦点将转到表单中的下一个字段。

这是我首先针对有问题的 Javascript 字段的代码:

function validatexxxx()
{
var e = document.getElementById('xxxxNumber');
//check to see if the xxxx number is already in use.
for (i = 0; i < xxxxArray.length;i++) {

if (e.value == xxxxArray[i]) {
    alert("That xxxx Number is already in use!");
        e.focus();
        return false;
    }//end if e.value = xxxxarray 

}//end for loop
var eText = e.value;
if (eText.length >= 15) {

    alert("xxxx Number must be less than 15 characters long!");
    e.focus();
    return false;
}
    return true;

}

以及输入所在的html:

<tr><td>xxxx No.: </td><td><input type="textbox" id="xxxxNumber"
name="xxxxNumber" onblur="return validatexxxx();"/> </td> </tr>
4

3 回答 3

3

这是alert()导致焦点消失的原因。显示弹出窗口后,您正在设置焦点。但是当用户需要OK在出现的弹出窗口中点击时,焦点就丢失了。

于 2013-08-21T15:09:03.667 回答
2

试图从“模糊”处理程序中强制聚焦本质上是有问题的。试试这个:将你的调用包装.focus()在一个超时处理程序中。这将使“模糊”事件在尝试设置焦点之前完成:

setTimeout(function() { e.focus(); }, 1);

此外,alert()也可能有问题,尤其是在 Safari 中。该浏览器有(或过去有过;我最近没有尝试过)倾向于认为“警报”窗口的出现意味着主浏览器窗口失去了焦点。之后,Safari 将完全忽略对.focus(). 使用自定义“对话框”方案或其他报告验证错误的方式,您的界面会更好看。

于 2013-08-21T15:08:06.757 回答
0

试着把它放在这样的封闭中。

e.focus(function() {
   alert("xxxx Number must be less than 15 characters long!");  
});
于 2013-08-21T15:14:56.483 回答