2016-01-03 265 views
0

所以我有HTML和jQuery代碼。當我第一次點擊圖像(當它有類隱藏時)首先jquery點擊函數執行,但是當我再次點擊圖像時它不會執行其他的。這是爲什麼?我將課程從隱藏改爲顯示,所以它應該執行第二個。Jquery觸發事件

$(document).ready(function(){ 
 

 
$("#slide.hide").click(function() { 
 
\t \t $("#slide").attr("src","arrow-down-icon.png"); 
 
\t \t $('#wrapper').slideUp(1000); 
 
\t \t $("#slide").removeClass("hide").addClass("show"); 
 
}); 
 

 
$("#slide.show").click(function() { 
 
\t \t $("#slide").attr("src","arrow-up-icon.png"); 
 
\t \t $('#wrapper').slideDown(1000); 
 
\t \t $("#slide").removeClass("show").addClass("hide"); 
 
}); 
 
    
 
});
<img src="arrow-up-icon.png" alt="up" height="42" width="42" class="hide" id="slide"> 
 

 
<div id="wrapper"> 
 
\t 123 
 
</div>

+0

處理程序添加到代碼運行時不晚選擇***匹配***,元素的事件。換句話說,改變類不會奇蹟般地讓事件處理程序工作,所有的邏輯都應該放在'.hide'的事件處理程序中,然後在點擊發生時檢查元素類*** 。 – adeneo

回答

0

直接結合是不是一個連續的過程。它用於過濾匹配元素以附加事件處理程序。如果它們在綁定評估時不匹配,處理程序將不會被附加。

您可以通過使用委託綁定來解決此問題,該委託綁定將評估來自子級的冒泡事件以查看邏輯是否應該處理。

$("#slide").parent().on('click', '#slide.show', function(){ 
    //will execute if the child slide has the class show 
}).on('click', '#slide.hide', function(){ 
    //will execute if the child slide has the class hide 
}); 

或者乾脆將兩者結合起來處理

$('#slide').on('click', function(){ 
    var $this = $(this); 

    if ($this.hasClass('hide')) { 
     //do stuff 
    } else { 
     //do stuff 
    } 
});