微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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的目的基本上是测试,以查看所关注的控件是否为列表。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。