2013-02-10 54 views
1

這是一段簡單的代碼,所以我不會解釋它做了什麼。這裏刪除屬性按鈕仍然是jQuery中的perfoming動作

問題是我點擊後.likes.1格,然後單擊.likes.2格,然後重新.likes.1它結束了我展示.article-info股利。

因此,即使屬性姓氏刪除它仍然執行它的任務。

這是爲什麼?

$(document).ready(function() { 

    $(".likes.1[surname|='first']").click(function() { 
     generate('information'); 
     $(this).removeAttr('surname'); 
     $(".article-info").show(); 
    }); 

    $(".likes.2").click(function() { 
     $(".article-info").hide(); 
    }); 

回答

2

點擊事件的綁定發生在頁面加載時,或者更準確地說DOM準備就緒。

$(".likes.1[surname|='first']").click(function() { ... }) 

此結合事件對頁面加載該選擇器匹配的任何及所有元素,移除屬性,類ID或其他任何東西在以後的時間與該選擇不會改變,因爲該事件是已經綁定。

您需要解除綁定事件或使用委派的事件處理程序,作爲一個委託處理程序會在每次點擊查詢選擇:

$(document).on("click", ".likes.1[surname|='first']", function() { ... }) 

您應該使用最近的可用父目標元素,而不是的文檔(和一個只包含數字的類通常不是一個好主意)。

或類似的東西:

$(".likes.1[surname|='first']").on('click', function() { 
    generate('information'); 
    $(this).off('click'); 
    $(".article-info").show(); 
}); 
+0

+1,但使用這樣的複雜的代表團選擇直接綁定到該文件可能會降低頁面的性能。 – 2013-02-10 18:32:40

+0

@FabrícioMatté - 你是對的,至少添加了一條評論,用最接近的父代替代文檔,使事件處理程序「更窄」。 – adeneo 2013-02-10 18:34:28

+0

我明白了,您的更新答案始終詳細。 – 2013-02-10 18:36:22