我正在爲一個客戶端項目(一個非常老的人復活)工作。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