2016-01-03 273 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 
    } 
});