我想附加一个来自字符串的事件。我遇到的问题是函数名称不是作为字符串传入,而是在调用函数时被编译,导致未定义的变量错误(temp)。
function someFun(arg) {
alert(arg) ;
}
temp[0] = "someFunc(test)" ;//this would be a sample of the incoming HTML
var x = 0 ;
while(temp[x] != '') {
temp[x] = temp[x].replace(')','').split('(') ;//remove paranthesis and separate func name from args
temp[x][1] = temp[x][1].split(',') ;//turn string of args into array
func = function() { window[temp[x][0]].apply(el,[]) ; }
el.addEventListener('click',func,false) ;
x++ ;
}
如果我不使用temp [x] [0](这将是'someFunc'),而是直接传入.apply方法的字符串(在本例中为.apply('someFunc'...))没有问题,将按预期使用onClick调用该函数。否则,当我点击元素el时,我会收到一个错误,即未定义temp。
答案 0 :(得分:2)
我很确定如果在分配函数之前将temp[x][0]
分配给变量,它应该可以工作。像这样的东西
if (attributes._onClick) {
temp = attributes._onClick;
var x = 0;
while(temp[x] != '') {
var funcSig = temp[x].replace(')','').split('('); //remove paranthesis and separate func name from args
var funcName = funcSig[0];
var funcArgs = funcSig[1].split(','); //turn string of args into array
func = function() { window[funcName].apply(el,[]); }
el.addEventListener('click',function(){
window[funcName].apply(el,funcArgs); }
,false);
x++;
}
}