我很肯定我以错误的方式问了这个问题。我正在尝试将字符串传递onClick="someFunc(arg1,arg2...)"
给 javascript 解析器。
解析器应该为带有 args (arg1, arg2 etc) 的 someFunc 创建一个 onClick 事件。
我的问题是,当文本通过解析器传递时,保存 someFunc 字符串名称的变量的范围正在被传递,以便附加事件都注册为最后声明的字符串。
在下面的代码中,attributes._onClick 可以是字符串 'onClick="someFunc(arg1,arg2);" 对于一个元素,后跟 'onClick="otherFunc(argA,argB);" 对于另一个元素,因为解析器在字符串中移动。
浏览器 (Firefox V14.01) 中的输出具有始终注册为 otherFunc 的事件函数。所以闭包中的 f_name 不是作为变量进行评估,而是只是注册为在整个块解析过程中声明的 f_name 的最后一个值。
我不熟悉范围到我需要弄清楚这一点的程度。有谁知道我可以以这种方式附加事件的方法(我试图避免超出解析器来添加事件)?
temp = attributes._onClick ;
var x = 0 ;
var f_name,f_args ;
while(temp[x] != '') {
temp[x] = temp[x].replace(')','').split('(') ;//remove paranthesis and separate func name from args
f_name = temp[x][0] ;
f_args = temp[x][1].split(',') ;//turn string of args into array
el.onclick = function() { window[f_name].apply(el,f_args) ; }
x++ ;
}