如何在这种情况下使用param添加回调?

时间:2012-06-07 09:46:14

标签: javascript callback

我有一个表dom元素

<table id='acc001'>...</table>

我创建了一个弹出菜单,在单击该tr元素后获取tr数据

  var tr = $('<tr>').appendTo('#acc001');
  popupMenu.draw_menu(tr);

  var popupMenu = {
    menu : [
      {'string':'add data','type':'input','callback':function(tr){console.log(tr);}},
      {'string':'edit data','type':'input','callback':function(tr){console.log(tr);}}
    ],
    draw_menu : function(tr){
        for(i in this.menu)
        {
          var div = $('<div>',{'text':this.menu[i].string}).appendTo('#infoDiv');
          $(div).bind('click',this.menu[i].callback); // i cannot send param for this callback
        }
    }
  }

问题出在创建菜单后但是点击后我无法获得tr内容。 所有console.log都无法显示..

  1. 那么如何为此回调添加和发送参数?
  2. 正确执行此代码的任何其他方式?

1 个答案:

答案 0 :(得分:2)

将其包装在函数中并将tr传递给回调:

$(div).bind('click',(function(callback) {
    return function() { callback(tr) }
})(this.menu[i].callback));

(编辑:this不会来自事件处理程序内的适当上下文;再次修复)