0

我有一个表 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. 还有其他方法可以正确执行此代码吗?
4

1 回答 1

2

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

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

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

于 2012-06-07T09:49:27.383 回答