2012-06-02 55 views
0

我有一個問題,也許是使用全局變量導致一些問題的經驗不足。jQuery - 與全局變量問題

請檢查這個http://jsfiddle.net/ZgXKx/當您點擊請點擊我!我使用全局變量動態設置某些元素的ID。

我有這個代碼的問題:

$("#service-sets").on('click', "#facebook-del-"+a, function() {   
    var aa = $("#facebook-del-"+a).parent().parent().parent().attr("id"); 
    $('#'+aa).remove(); 

它不進入點擊事件,因爲在"#facebook-del-"+a.on('click')不工作,而點擊事件裏面的一個工作(顯示值"#facebook-del-1")。

當我改變了這樣的代碼,它有沒有問題

$("#service-sets").on('click', "#facebook-del-1", function() {   
    var aa = $("#facebook-del-"+a).parent().parent().parent().attr("id"); 
    $('#'+aa).remove(); 

你可以檢查出來這裏http://jsfiddle.net/ZgXKx/1/

那麼,什麼是錯誤,我做了什麼?

謝謝!

+0

什麼是' 'A' 的變量 「#Facebook的德爾 - 」 +了'? –

+0

這是一個全局變量'a'。請檢查我提供的jsfiddle – rnk

回答

2
$("#service-sets").on('click', "[id^=facebook-del]", function() {   
    $(this).closest('div.tag').remove(); 
}); 

DEMO

這裏,

[id^=facebook-del]是那些元素(交叉),誰的id下手facebook-el。所以像這樣設置委託事件將不需要任何索引與全局變量a

$(this).closest('div.tag')目標爲div.tag,這是點擊交叉的容器。

+0

是的,這是一個更好的方法。 – Pointy

+0

@點感謝先生 – thecodeparadox

1

問題源於這樣一個事實,即與其看起來相反,「a」變量是全球性的而不是。它位於由jsfiddle自己爲您創建的函數中。

將控件設置在左側,將代碼放置在<head>而不是「onload」處理程序中,並且它可以工作。

此外,沒有理由去做那些代碼來刪除添加的標記。也就是說,查找元素,獲取其「id」值,然後通過「id」重新找到元素的過程是毫無意義的。一旦你找到了那些「.parent()」調用的元素(這本身就是一種非常脆弱的做法;最好給外部包裝器一個類,然後使用.closest(".whatever")),你已經知道了,沒有理由再找到它。

編輯 —現在我想起來了,雖然我剛纔說的「a」是真的—,它不是真正的全球—它不應該在這種情況下,無所謂。然而,這是jsfiddle常常引起的煩惱(當然,保佑他們的心)。

0

您不會增加a,直到在回撥內部點擊#facebook-button。當這種運行:

$("#service-sets").on('click', "#facebook-del-"+a, function() {   
    .. 
}); 

a仍然是0,而你只有每處理單擊事件#facebook-del-0它將永不存在。

您可以使用類來刪除。給你的關閉按鈕類 「臉譜-DEL」,然後用它來關閉它:

$("#service-sets").on('click', '.facebook-del', function() {   
    $(this).parent().parent().parent().remove(); 
}); 

JSFiddle