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

如果我不使用 temp[x][0] (这将是 'someFunc'),而是直接为 .apply 方法(在本例中为 .apply('someFunc'...) )传入一个字符串,我没有问题并且该函数将按预期使用 onClick 调用。否则,当我单击元素 el 时,我会收到一个错误,即 temp 未定义。

4

1 回答 1

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++;
  }
}
于 2012-07-31T06:03:08.507 回答