我的事件处理程序出了什么问题?

时间:2011-07-24 02:37:57

标签: javascript jquery html dom javascript-events

假设我将jquery click事件的事件处理程序附加到我的对象的一个​​函数中。但为什么它在我的属性上返回undefined?

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

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

3 个答案:

答案 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); },

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

答案 2 :(得分:0)

你可以使用:

 $('#bind')
     .data('label', 'underscore')
     .click(function() {
         alert('clicked: ' + $(this).data('label'));
     });
相关问题