Javascript 对动态创建的元素使用$.proxy

Javascript 对动态创建的元素使用$.proxy,javascript,jquery,Javascript,Jquery,我试图将一个点击事件绑定到一个动态创建的元素,该元素通常可以正常工作,但是当我将$.proxy抛出到混合中时,它就不再工作了。我可以让$.proxy单独工作,也可以让动态元素上的单击事件单独工作,但当我尝试将它们组合在一起以完成我需要的工作时,它不起作用。为什么会这样 selectProduct: function(){ console.log("hello"); }, binds: function() { // When user selects a product

我试图将一个点击事件绑定到一个动态创建的元素,该元素通常可以正常工作,但是当我将$.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));
}
如果元素不是动态创建的,则此操作有效:

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

这个问题是由于这个问题的范围。在第一个示例中,它将是一个包含.lm-fancy-select\u选项的元素对象。在第二个示例中,它将是对保存binds属性的对象的引用

我希望它是对.lm-fancy-select\u选项的单击事件的引用

在这种情况下,您可以从提供给事件处理程序的参数中检索事件,并使用该范围调用$.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调用的范围将是元素本身,通过提供的第一个参数,该事件可用于该函数

var obj={ 选择产品:functione{ console.log$this.text; }, 绑定:函数{ $'sfProductList'。在“单击”时,'.lm-fancy-select___选项',此.selectProduct; } } obj.binds; 福 酒吧
这是由于这个范围。你希望它是指什么?还有,你想用什么范围来调用selectProduct?@Rorymcrossan我希望它是对.lm-fancy-select\u optionOh man的点击事件的引用,现在我觉得自己傻了!您可以通过向事件处理程序提供selectPoduct的引用来简化此逻辑,这很有效!这是漫长的一周…仅供参考,我会在允许的情况下接受答案。堆栈溢出上有一个接受答案的计时器,但是你回答得太快了!