我正在为一个客户端项目(一个非常老的人复活)工作。Javascript,又一个“太多的递归”问题:邪恶eval的复仇()
当我浏览在Firefox项目的JSP中的一个(4.0在这种情况下,但我想这与3.X也发生),Firebug的控制台上会出现以下错误:
Error: too much recursion
Archivo fuente: 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()
调用有关,但尽管我试图用this document中提出的[]替代替换这些“邪恶”调用,例如:var elemento = forma[nombreControl];
,但我没有得到预期的结果,错误仍然存在:同一行,同一条消息。
请问您有什么建议吗?提前致谢。
if(gControl)giveFocusToControl(gControl.name);}看起来像什么代码? – dlev 2011-04-12 17:48:32
在表单或表单元素的焦点上调用'giveFocusToControl'吗?如果是这样的话,可能会发生,因为这个函数在'campo.focus()'重复调用' – mVChr 2011-04-12 17:50:51