簡體   English   中英

jQuery單擊處理程序中的范圍

[英]Scope within jQuery click handler

我有一個函數,我可以在其中獲取一些數據,並將其插入到表格的一行中。

然后我在該行上設置了一個點擊事件,以便當它被點擊時,它會導航到我的數據對象中指定的 URL:

$(data).each(function(i, item) {

    var row = $("<tr></tr>");
    tbody.append(row);

    // Add some cells into the row...
    var firstNameCol = $("<td>" + item.FirstName + "</td>");
    row.append(firstNameCol);

    // Set up click handler
    row.click(function() {
       window.location.href = item.DetailsURL;
    });
 });

現在這段代碼工作正常,但它讓我意識到我不確定事件是如何工作的。

該函數包含對item的引用,它是我的 for 項目循環的本地變量。 當用戶單擊該行時,它如何知道它正在查看哪個項目? 注冊點擊功能時是否以某種方式緩存?

其次,這種方法真的很糟糕嗎? 我是在強迫它在幕后做大量工作嗎?

item綁定時在該范圍內可用的變量,因此您傳遞給.click()函數的匿名函數當時只會獲取它的副本(或引用,如果它是一個對象)。

當然,您可以將其稱為“緩存”,但它只是當時獲得的引用或變量副本。 .each()創建一個閉包,你傳遞給它的回調函數( function(i, item) {...} ),並在里面(取決於它是否是一個對象,在這種情況下你會得到相同的引用) 你會為循環的那個迭代獲得你自己的副本。

至於性能,這真的不是“工作量”,這是完全正常的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM