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

|| 我正在为一个客户进行一个项目(一个很老的项目被复活)。 当我在Firefox中浏览该项目的JSP之一(在这种情况下为4.0,但我想它也与3.x一起发生)时,在Firebug控制台上会出现以下错误:   错误:递归过多    Archivo功能:https:// localhost:9443 / ClientProjectWeb / js / Object.js    利纳(Línea):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()
调用有关,但是尽管我尝试用本文档中建议的[]替代替换那些\“ evil \”调用,例如:
var elemento = forma[nombreControl];
,但我没有得到预期的结果,错误仍然存​​在:同一行,同一条消息。 请问您有什么建议吗?提前致谢。     
已邀请:
campo.focus()是我开始调查的地方。我会在campo.focus()之前放一个警报,然后检查警报是否被多次调用。如果是这种情况,则需要考虑在哪里调用了GiveFocusToContol()方法。此方法中的eval调用不是真正必需的。如果不使用代码,我会说第一个eval可以替换为
forma.controls[nombeControl];
,我一定要玩第二个调用才能获得评估它的最佳方法。 ѭ5的目的基本上是测试,以查看所关注的控件是否为列表。     

要回复问题请先登录注册