Javascript,又一个“太多的递归”问题:复仇的邪恶eval()
Javascript, yet another "too much recursion" issue: Revenge of evil eval()
我正在为一个客户做一个项目(一个很老的项目,被复活了)。
当我在Firefox中(在本例中为4.0,但我认为它发生在3中)浏览该项目的其中一个jsp时。在Firebug控制台中出现以下错误:
错误:太多递归
Archivo fuente: https://localhost:9443/ClientProjectWeb/js/Object.js
线: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()开始我的调查。我将在每次调用campo.focus()之前放一个警报,并检查警报是否被多次调用。如果是这种情况,您将需要考虑在何处调用givefocustocontrol()方法。这个方法中的eval调用实际上是不必要的。如果不玩代码,我会说第一个eval可以用forma.controls[nombeControl];
代替,我肯定要玩第二个调用,以获得最好的方法来评估它。if(eval(elemento.length))
的目的基本上是测试所讨论的控件是否是一个列表。
相关文章:
- “出口”;保存以备以后使用”;远离(邪恶)
- 这是中世纪的邪恶吗
- 埃瓦尔做了什么,为什么它是邪恶的
- RPS游戏的复仇(这次用jquery!)
- 如何获取jquery.Ajax与“;投掷1<不要邪恶>"在json响应前面
- 关于eval的邪恶:如何清理
- 扩展JavaScript的内置类型 - 它是邪恶的吗?
- eval是邪恶的,但是我有选择吗?
- 如何应对邪恶?在System.Shell.execute()之前验证用户输入
- 替代邪恶的求值-关系运算符
- 从Textarea执行Javascript - JSHint eval是邪恶的
- 存储供以后函数使用的值的最佳方法是什么?我听说全局变量是邪恶的
- 邪恶的pdf - javascript调试
- 需要一个HTML框架的替代品(我现在知道为什么它们是邪恶的)
- Javascript,又一个“太多的递归”问题:复仇的邪恶eval()
- 编码风格 - JavaScript 的 eval() 什么时候不是邪恶的