2011-02-04 58 views
1

例如,如果我點擊add + 9次,我將會有10個盒子。但在此之後,只有當點擊最後一個框時,它纔會隱藏。 (我想通過點擊該框來隱藏特定的框)。順便點擊(和去除)最後一個盒子後,其他盒子不會以任何方式隱藏 最新消息我的問題?理解JQuery選擇器的問題

$(document).ready(function(){ 
    $("#add").click(function(){ 
     $(".test:last").clone().insertAfter(this); 
    }) 
    $(".test").click(function(){ 
     $(this).hide("slow"); 
    }) 
}) 

<div id="add">ADD+</div> 
<div class="test" style="border:1px solid black; width:70px; height:25px;"> 
    box 
</div> 

回答

4

因爲只是連接文檔加載時存在的那個。更改

$(".test").click(function(){ 
    $(this).hide("slow"); 
}) 

$(".test").live('click', function(){ 
    $(this).hide("slow"); 
}); 

click是事件掛鉤,以元素已經存在。使用live,您可以更具投機性,並說「將此事件掛接到任何已存在的事件,任何我稍後添加的匹配此選擇器。」還有delegate,如果您想要live的功能,但是對於特定元素的後代,則可以使用它。

詳情:

+0

+1的解釋。很有用。 – Mayank 2011-02-04 17:26:16

3

使用.clone(true),而不是僅僅.clone()複製事件處理爲好。

例子:http://jsfiddle.net/hQ5Qc/


我也想補充一點,你可能要改變這個選擇:

$(".test:last") 

這樣:

$(".test:visible:last") 

所以如果你隱藏最後一個盒子,你不會克隆那個盒子已經隱藏了。

例子:http://jsfiddle.net/hQ5Qc/2/

+1

這是另一種方式,是的。 – 2011-02-04 17:25:15

+0

+1爲簡單起見。 – Mayank 2011-02-04 17:27:14

0
  1. 你應該花更多的時間在寫你的問題,糾正你的拼寫和語法。
  2. 這個問題在很多方面都被問過。
  3. 看那jQuery APIlivedelegate,或clone
+1

這些是*評論*,而不是*答案*。 – 2011-02-04 17:30:59

0
$(document).ready(function(){ 
    $(".test").click(function(){ 
     $(this).hide("slow"); 
    }) 

    $("#add").click(function(){ 
     $(".test:visible:last").clone(true).insertAfter(this); 
    }) 
}) 

添加:visible根據註釋建議