假设我将jquery click事件的事件处理程序附加到对象的功能之一。但是,为什么它在我的属性上返回未定义?

var buttonView = {
              label   : 'underscore',
              onClick : function(){ alert('clicked: ' + this.label); },
        };

$('#bind').bind('click', buttonView.onClick); //clicked: undefined --> why is it undefined ?

最佳答案

您正在传递buttonView.onClick引用的函数,但未保留与buttonView的关联。

要通过this保留引用,可以使用 jQuery.proxy() 方法。

$('#bind').bind('click', $.proxy(buttonView,'onClick'));

现在,this函数中的onClick将引用您的buttonView对象。

实时示例: http://jsfiddle.net/K72qs/

或者简单地在buttonView函数中明确引用onClick:
onClick : function(){ alert('clicked: ' + buttonView.label); },

实时示例: http://jsfiddle.net/K72qs/1/

09-19 16:13