将$ .proxy与动态创建的元素一起使用

时间:2018-08-31 08:20:19

标签: javascript jquery

我试图将click事件绑定到动态创建的元素上,该元素通常可以正常工作,但是当我将cout << "i: " << 123 << endl; 放入混音中时,它将不再起作用。我可以使$.proxy分开工作,也可以使动态元素的点击事件也分开工作,但是当我尝试将它们组合在一起以完成我需要的操作时,它将无法工作。为什么会这样?

$.proxy

也尝试过

selectProduct: function(){
    console.log("hello");
},

binds: function() {
    // When user selects a product
    $('#sfProductList').on('click', '.lm-fancy-select__option', function(){
        $.proxy(this.selectProduct, this);
    });
}

如果该元素不是动态创建的,那么它将起作用:

binds: function() {    
  // When user selects a product
  $('#sfProductList').on('click', '.lm-fancy-select__option', $.proxy(this.selectProduct, this));
}

1 个答案:

答案 0 :(得分:2)

该问题归因于pip install -e file:///[path to the checkout]#egg=[name for the egg] 的范围。在第一个示例中,它将是一个包含pip install -e file:///home/john/site/apps/testapp-test#egg=test 的Element对象。在第二个示例中,它将是对拥有this属性的对象的引用。

  

我希望它是对.lm-fancy-select__option的点击事件的引用

在这种情况下,您可以从提供给事件处理程序的参数中检索事件,并使用该作用域调用binds

.lm-fancy-select__option

但是必须注意,这完全没有意义。您可以通过仅向事件处理程序提供$.proxy的引用来简化此逻辑:

binds: function() {
  var _this = this; // get reference to parent object    
  $('#sfProductList').on('click', '.lm-fancy-select__option', function(e) {
    $.proxy(_this.selectProduct, e);
  });
}

现在,selectPoduct调用的范围将是元素本身,并且该事件可通过提供的第一个参数用于该函数。

binds: function() {
  $('#sfProductList').on('click', '.lm-fancy-select__option', this.selectProduct);
}
selectProduct