javascript - 在这种情况下如何添加带参数的回调?

标签 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. 还有其他方法可以正确执行此代码吗?

最佳答案

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

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

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

关于javascript - 在这种情况下如何添加带参数的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929410/

相关文章:

Javascript 回调函数没有被触发

ruby-on-rails - ActiveRecord 回调未执行

javascript - 当没有互联网连接时,错误回调不会触发

javascript - 根据 d3 中数据中的属性动态地将 tspan 添加到 g 元素

Javascript 搜索栏过滤器,在页面上隐藏/显示

javascript - 为什么 uglify 不能处理 AngularJS 内容?

javascript - 如何使用 angularJs 动态更改 HTML 的 id

javascript - JS 中的柯里化(Currying) : Pass additional variable to callback without changing the callback signature

javascript - 创建回调函数的最佳方式

javascript - 根据 Redux 状态更改组件的布局