Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript,又一个;“递归太多”;问题:邪恶的复仇eval()_Javascript_Firefox_Recursion_Firebug_Eval - Fatal编程技术网

Javascript,又一个;“递归太多”;问题:邪恶的复仇eval()

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

我正在为一个客户做一个项目(一个很老的项目,后来又恢复了)

当我在Firefox中浏览项目的一个JSP时(在本例中为4.0,但我认为在3.x中也会出现),Firebug控制台上会出现以下错误:

错误:递归太多
阿奇沃·富恩特:
利尼亚: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的提醒。谢谢大家