在函数声明而不是运行时解析所有变量

时间:2012-07-31 05:40:06

标签: javascript variable-declaration

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

1 个答案:

答案 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++;
  }
}