2012-12-04 57 views
0

似乎每次調用edit()函數都會覆蓋此函數中的變量。上次調用的內部函數參考參數

function edit(el) 
{ 
    $edit_img = $(el); 
    $btn = $('<img width="15" height="15" src="images/add.png">'); 

    $edit_confirm = $edit_img.parent(); 

    $edit_confirm.append($btn); 

    function restore_span() 
    { 
     $edit_img.show(); 

     $btn.remove(); 
    } 

    $btn.click(restore_span); 

    $edit_img.hide(); 
} 

編輯功能,從這個onclick處理程序調用:

<img src = "images/edit-icon.png" width = "15px" height = "15px" onclick="edit(this)" /> 

當調用幾個相似圖片的上面一個唯一的形象,這是最最近創建獲取刪除編輯()。

我應該如何修改此功能以解決此問題?

回答

2

與PHP不同,JavaScript中的變量對於塊或函數並不隱式地是本地的。

聲明變量作爲函數的局部範圍內,使用var statements

function edit(el) { 
    var $edit_img = $(el), // use them with comma 
     $btn = $('<img width="15" height="15" src="images/add.png">'); 
    var $edit_confirm = $edit_img.parent(); // or just multiple times 
    $edit_confirm.append($btn); 
    $btn.click(function restore_span() { 
     $edit_img.show(); 
     $btn.remove(); 
    }); 
    $edit_img.hide(); 
} 
+0

感謝。在學習jQuery之前,我一直使用var,但從那以後,我完全忘記了這麼做。 – mnn

+0

不要學習jQuery,然後:-) – Bergi

4

使用var $btn代替$btn(也爲其他變量)

當你寫 var $btn - 創建局部變量 時沒有var - 這是全球

所以你的情況你替換每次這些變量(例如用於恢復功能的$edit_img