假设我将jquery click事件的事件处理程序附加到我的对象的一个函数中。但为什么它在我的属性上返回undefined?
var buttonView = {
label : 'underscore',
onClick : function(){ alert('clicked: ' + this.label); },
};
$('#bind').bind('click', buttonView.onClick); //clicked: undefined --> why is it undefined ?
答案 0 :(得分:2)
在下面的onclick处理程序中,这指向具有id“bind”的dom元素,并且它没有label属性。如果您有任何自定义属性作为标签,您应该使用$(this).attr(“label”)来修复它。试试这个
function(){ alert('clicked: ' + $(this).attr("label")) };
答案 1 :(得分:1)
您正在传递buttonView.onClick
引用的功能,但与buttonView
的关联不会保留。
要通过this
保留引用,您可以使用jQuery.proxy()
[docs]方法。
$('#bind').bind('click', $.proxy(buttonView,'onClick'));
this
函数中的onClick
现在将引用您的buttonView
对象。
实例: http://jsfiddle.net/K72qs/
或者只是在buttonView
函数中明确引用onClick
:
onClick : function(){ alert('clicked: ' + buttonView.label); },
答案 2 :(得分:0)
你可以使用:
$('#bind')
.data('label', 'underscore')
.click(function() {
alert('clicked: ' + $(this).data('label'));
});