Javascript 验证onblur不工作的字段后设置焦点

Javascript 验证onblur不工作的字段后设置焦点,javascript,validation,Javascript,Validation,在花了一个小时或更多的时间寻找替代品之后,我的脑子里空空荡荡的。当失去焦点时,调用一个函数,在验证失败时将焦点设置回调用字段的部分不起作用 示例如下: var-emptyString=/^$/; 函数validatePresent(valfield, 信息场){ var stat=commonCheck(valfield、infofield、true); 如果(stat!=继续)返回stat; 消息(信息字段,“警告”,“警告”); 返回true; } var=2; 功能通用检查(valfi

在花了一个小时或更多的时间寻找替代品之后,我的脑子里空空荡荡的。当失去焦点时,调用一个函数,在验证失败时将焦点设置回调用字段的部分不起作用

示例如下:

var-emptyString=/^$/;
函数validatePresent(valfield,
信息场){
var stat=commonCheck(valfield、infofield、true);
如果(stat!=继续)返回stat;
消息(信息字段,“警告”,“警告”);
返回true;
}
var=2;
功能通用检查(valfield,
infofield,
(必需){
如果(!document.getElementById)
return true;//此浏览器上不可用-将验证留给服务器
var infoelem=document.getElementById(infofield);
如果(!infoelem.firstChild)返回true;
if(infoelem.firstChild.nodeType!=Node.TEXT\u Node)返回true;
if(清空字符串测试(valfield.value)){
如果(需要){
消息(信息字段,“错误”,“错误:必需”);
setfocus(valfield);
返回false;
}否则{
msg(信息字段,“警告”,“警告”);//确定
返回true;
}
}
返回并继续;
}
函数msg(fld,
msgtype,
(信息){
var显示消息;
if(清空字符串测试(消息))
dispmessage=String.fromCharCode(160);
其他的
dispmessage=消息;
var elem=document.getElementById(fld);
elem.firstChild.nodeValue=dispmessage;
elem.className=msgtype;
}
函数setFocusDelayed()
{
全局_valfield.focus();
}
函数设置焦点(valfield)
{
//将valfield保存在全局变量中,以便在例程退出时保留值
全局_valfield=valfield;
setTimeout('setFocusDelayed()',100);
}

杂项1:
无论什么:
选择
选择1
选择2
试试这个:

function setfocus(valfield)
{

  setTimeout( function () {
      valfield.focus();
  }, 100 );
}

使用全局变量将闭包传递给
setTimeout
w/o。

文本墙+代码墙=不帮助它。请准确点。哦,不知道那是什么意思。我应该删掉所有的解释部分,只放几行不按预期工作的代码?如果你能放一把小提琴,简单地解释一下你的问题,那就太好了。我提供了一个链接,显示了这个问题。我的小提琴不行(先试试看)。这并不复杂。在调用onblur验证函数后,setfocus不起作用。
document.getElementById(valfield)
永远不会起作用,如果
valfield
不是字符串-仔细看,
valfield
已经是dom元素-它是
commonCheck
的第一个变量,这又是
validatePresent
的第一个变量,它最终从内联js获取其值,第一个变量作为
this
传递,如果使用js找到触发元素,则最终将获得该值。基本上,您不需要找到id为的元素,因为您已经获得了该元素。;)好的,这就给出了相同的结果@Axel Amthor,在离开第一个字段时,两个字段之间无休止的循环,没有任何输入到字段中。因此,全局或闭包没有效果,没有进行任何焦点设置。如果我将setfocus函数改为valfield.focus();它停止了无休止的焦点循环,但是在验证之后焦点被设置为第二个字段,因此它基本上被忽略。