2011-07-24 105 views
3

假設我將jquery click事件的事件處理程序附加到我的對象的某個函數中。但爲什麼它返回未定義在我的屬性?我的事件處理程序有什麼問題?

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

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

this.label不正確 – Ibu

回答

1

你路過buttonView.onClick引用的功能,但它與buttonView不保留關聯。

要通過this保留參考,可以使用jQuery.proxy()[docs]方法。

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

現在thisonClick功能將參考您的buttonView對象。

活生生的例子:http://jsfiddle.net/K72qs/


或者乾脆讓在onClick功能明確提及buttonView

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

活生生的例子:http://jsfiddle.net/K72qs/1/

2

在下面的onclick處理程序中,它指向id爲「bind」的dom元素,並且它沒有label屬性。如果你有任何自定義屬性作爲標籤,你應該使用$(this).attr(「label」)來取回它。試試這個

function(){ alert('clicked: ' + $(this).attr("label")) }; 
+0

他試圖獲得'buttonView'對象的'label'屬性。 – user113716

+0

這根本不可能。他必須爲該按鈕設置一個屬性並使用它。 – ShankarSangoli

+1

@ShankarSangoli它可以像@patrick dw所說的那樣實現,因爲它通過閉包(通過代理或'buttonView')來實現。 –

0

你可以只ü se:

$('#bind') 
    .data('label', 'underscore') 
    .click(function() { 
     alert('clicked: ' + $(this).data('label')); 
    }); 
相關問題