2012-01-10 24 views
1

當使用jQuery,我經常內的事件,職能方面取得的$(this)使用等

最近我嘗試了以下內容:

function btn_edit_click (event) { 
    alert(event.data.idnum); 
} 
$(".btn_edit").on("click", { idnum: $(this).attr("title") }, btn_edit_click); 

出於某種原因,我得到整個PAGE的標題,而不是$(".btn_edit")引用的元素。我做錯了什麼,或者是這種預期的行爲?

回答

4

那麼它取決於這個代碼嵌套在什麼。如果答案是什麼,那麼this指的是window對象。

如果您在事件處理程序中指的是this,那麼this將引用事件觸發的元素。但它看起來好像在全球空間中使用this

如果你想.btn_edit元素的標題可訪問在回調函數只是指this在回調函數(注意它是如何簡化你的代碼以及):

function btn_edit_click (event) { 
    alert(this.title); 
    //UPDATE: I changed $(this).attr('title') to this.title because it performs much faster 
} 
$(".btn_edit").on("click", btn_edit_click); 

這裏是一個演示:http://jsfiddle.net/gRK3z/

而且,這裏是一個性能測試顯示利用.attr('title').title之間的區別:http://jsperf.com/jquery-attr-title-vs-title

+0

我喜歡這個解決方案,但是,由於您沒有傳遞數據對象,第二次警報是否有意義? – 2012-01-10 22:03:29

+0

@KevinB感謝您的投入,我覺得我的編輯越過您的評論的地方在中西部... – Jasper 2012-01-10 22:04:58

+0

這似乎是最簡單的...我不知道,當你不聲明函數內聯,你仍然可以請參閱「這個」 ...我還沒有意識到,this.title快:P ...感謝 – 2012-01-11 15:08:54

2

$(this)在全局範圍內被調用,而不是在回調方法中。所以是的,你應該期望用$(this)得到窗口或文檔對象。

一個更好的解決方案可能是:

<script type="text/javascript"> 
function btn_edit_click (event) { 
    alert(event.data.idnum); 
} 

$('.btn_edit').each(function(k, el) 
{ 
    $(el).on('click', { idnum: $(el).attr('title') }, btn_edit_click); 
}); 
</script> 
+0

啊......是有道理的......我只是去掉了「數據」,改變了功能:功能(){btn_edit_click($(本).attr( 「標題」))} – 2012-01-10 22:02:44

+0

這也應該工作。 – 2012-01-10 22:09:25

+1

一個更好的做法是開溝。每()和使用。對()已經在元素上。 – MarkSmits 2012-01-10 22:23:11

0

在你的情況你傳遞對象到on功能,所以this是不管它是在你所在的範圍

除非集。 ,this通常設置爲window

1

this的背景是不是您所期望它是,正如其他人指出。我認爲這是做的少令人費解,更可讀的方式是什麼,你正在嘗試做的:

$("#parentDiv").delegate(".btn_edit", "click", function (e) { 
    btn_edit_click(this.title); 
}); 
+1

+1'this.title',而不是'$(本).attr( 「標題」)'。 – Dennis 2012-01-10 22:04:36

0

當你創建了一個對象來傳遞數據通過它不在選擇範圍。相反,您可以簡單地傳遞函數的名稱以在處理程序中執行。

this在你的函數,那麼將涉及到元素在你的選擇中指定,節省的需求,爲您傳遞對象擺在首位:

function btn_edit_click (event) { 
    alert($(this).attr("title")); 
} 
$(".btn_edit").on("click", btn_edit_click); 

Example fiddle

相關問題