Javascript,又一个;“递归太多”;问题:邪恶的复仇eval()
我正在为一个客户做一个项目(一个很老的项目,后来又恢复了) 当我在Firefox中浏览项目的一个JSP时(在本例中为4.0,但我认为在3.x中也会出现),Firebug控制台上会出现以下错误: 错误:递归太多Javascript,又一个;“递归太多”;问题:邪恶的复仇eval(),javascript,firefox,recursion,firebug,eval,Javascript,Firefox,Recursion,Firebug,Eval,我正在为一个客户做一个项目(一个很老的项目,后来又恢复了) 当我在Firefox中浏览项目的一个JSP时(在本例中为4.0,但我认为在3.x中也会出现),Firebug控制台上会出现以下错误: 错误:递归太多 阿奇沃·富恩特: 利尼亚:226 以下是该行的代码片段: if(gControl){giveFocusToControl(gControl.name);} 这是被调用的函数: function giveFocusToControl(nombreControl){ var form
阿奇沃·富恩特:
利尼亚:226 以下是该行的代码片段:
if(gControl){giveFocusToControl(gControl.name);}
这是被调用的函数:
function giveFocusToControl(nombreControl){
var forma = document.forms[0];
var campo = null;
if(forma){
var elemento = eval("forma."+nombreControl);
if(eval(elemento.length)){
if(elemento.type == "select-one" || elemento.type == "select-multiple"){
campo = elemento;
}else{
campo = elemento[0];
}
}else{
campo = elemento;
}
if(campo.style && campo.style.visibility){
if(campo.style.visibility != "hidden"){
campo.focus();
}
}else{
campo.focus();
}
}
}
我怀疑这与函数内的eval()
调用有关,但尽管我已尝试用中提出的[]替换那些“邪恶”调用,例如:var elemento=forma[nombreControl]代码>,我没有得到预期的结果,错误仍然存在:相同的行,相同的消息
请问你有什么建议吗?提前感谢。campo.focus()是我开始调查的地方。我会在每个all to campo.focus()之前放置一个警报,并检查该警报是否被多次调用。如果是这种情况,则需要考虑调用GiVFuxStCo()方法的位置。此方法中的eval调用实际上不是必需的。如果不使用代码,我会说第一次评估可以用forma.controls[nombeControl]代替
我肯定必须使用第二个调用才能获得评估它的最佳方法。if(eval(elemento.length))
的目的基本上是测试所讨论的控件是否是一个列表。if(gControl)的代码给出了focustocontrol(gControl.name);}看起来像?表单或表单元素的焦点是否调用了giveFocusToControl
?如果出现这种情况,可能是因为在campo.focus()
上反复调用此函数,您可以将If(eval(elemento.length))
替换为If(elemento instanceof Array)
或use(或jQuery的)forma.controls
未定义,因此我尝试使用forma.elements
,看起来没问题。谢谢。@Rocket:if(数组的elemento instanceof)
似乎还可以。谢谢。尽管如此,我仍然会遇到“太多递归”错误,我将尝试mVChr的建议和Andrew的提醒。谢谢大家