可能会出现一些我再也找不到的东西。但是,一如往常,任何帮助都会受到赞赏。
我的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>
答案 0 :(得分:3)
alert()
导致焦点消失。显示弹出窗口后,您将设置焦点。但是,当用户需要在出现的弹出窗口中单击OK
时,焦点将丢失。
答案 1 :(得分:2)
尝试从“模糊”处理程序强制对焦本质上存在问题。试试这个:在超时处理程序中包含对.focus()
的调用。这将使“模糊”事件在尝试设置焦点之前完成:
setTimeout(function() { e.focus(); }, 1);
此外,alert()
也可能存在问题,尤其是在Safari中。那个浏览器曾经(或过去曾经没有尝试过)倾向于想象“警报”窗口的出现意味着主浏览器窗口失去了焦点。之后,Safari将完全忽略对.focus()
的任何调用。使用自定义“对话框”方案或其他报告验证错误的方式,您的界面看起来会更好。
答案 2 :(得分:0)
尝试将它放在这样的闭包中。
e.focus(function() {
alert("xxxx Number must be less than 15 characters long!");
});