2012-07-31 42 views
1

我想附加来自字符串的事件。我遇到的问题是函数名不是作为字符串传入的,而是在函数被调用时编译,导致未定义的变量错误(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++ ; 
    } 

如果我不使用温度[X] [0](这将是“someFunc”),但在用于方法。适用一个字符串,而传递(在这种情况下。适用(“someFunc” ... ))直接我没有问题,该函数将按预期与onClick调用。否则,当我点击元素埃尔我得到一个错误,温度没有定义。

+1

我想我们需要更多的信息来说明你正在做什么,如果我们知道更多的话,实现你的目标可能会有一点点不同。 – ctcherry 2012-07-31 05:50:43

+0

我试图发送一个像HTML一样写的字符串,并且让我的JavaScript解析器创建所有元素并添加像.innerHTML那样的属性+事件。在这种情况下,我试图将onClick事件附加到元素el。 – 2012-07-31 05:56:33

+0

请使用相关的代码和输入/输出示例更新您的问题,并解释为什么你在做什么你在做什么 – mplungjan 2012-07-31 05:57:04

回答

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++; 
    } 
} 
+0

工作!有点疯狂。非常感谢,我一直试图弄清楚为什么它不会永久编译。任何想法为什么字符串必须首先分配给一个单独的变量? – 2012-07-31 06:10:44

+0

@MagicLasso你能重新检查我的答案吗?我修改了你的初始代码,以清楚发生了什么。 – 2012-07-31 06:13:25

+0

@MagicLasso与关闭和使用变量的范围有关 - 更清晰地写,如我所示 – 2012-07-31 06:18:05

相关问题