2012-06-07 52 views
0

我有一个表中的DOM元素如何在这种情况下用param添加回调?

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

和我创建一个弹出菜单中点击该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数据,但我不能让TR点击它们后的内容。 所有console.log不能显示..

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

回答

2

包装在一个函数,并通过tr回调:

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

(编辑:this不会是从事件处理程序内部的正常范围内;再次固定)

+1

注意'这个'在回调中是点击'div'。您应该使用闭包保存上下文。 –

+0

是的,刚刚第二次发现自己:) – lanzz

+0

@misterjack:这是什么意思? – kreamik