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 に答える