Jquery 触发事件
Jquery trigering events
所以我有 HTML 和 jquery 代码。当我第一次点击图片时(当它有 class 隐藏时)首先 jquery 点击功能执行,但是当我再次点击图片时它不会执行其他的。这是为什么?我将 class 从隐藏更改为显示,因此它应该执行第二个。
$(document).ready(function(){
$( "#slide.hide" ).click(function() {
$("#slide").attr("src","arrow-down-icon.png");
$('#wrapper').slideUp(1000);
$("#slide").removeClass("hide").addClass("show");
});
$( "#slide.show" ).click(function() {
$("#slide").attr("src","arrow-up-icon.png");
$('#wrapper').slideDown(1000);
$("#slide").removeClass("show").addClass("hide");
});
});
<img src="arrow-up-icon.png" alt="up" height="42" width="42" class="hide" id="slide">
<div id="wrapper">
123
</div>
直接绑定不是一个连续的过程。它用于过滤匹配元素以附加事件处理程序。如果在绑定评估时它们不匹配,则不会附加处理程序。
您可以通过使用委托绑定来解决这个问题,委托绑定将评估来自子项的冒泡事件以查看逻辑是否应该处理。
$( "#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
}
});
所以我有 HTML 和 jquery 代码。当我第一次点击图片时(当它有 class 隐藏时)首先 jquery 点击功能执行,但是当我再次点击图片时它不会执行其他的。这是为什么?我将 class 从隐藏更改为显示,因此它应该执行第二个。
$(document).ready(function(){
$( "#slide.hide" ).click(function() {
$("#slide").attr("src","arrow-down-icon.png");
$('#wrapper').slideUp(1000);
$("#slide").removeClass("hide").addClass("show");
});
$( "#slide.show" ).click(function() {
$("#slide").attr("src","arrow-up-icon.png");
$('#wrapper').slideDown(1000);
$("#slide").removeClass("show").addClass("hide");
});
});
<img src="arrow-up-icon.png" alt="up" height="42" width="42" class="hide" id="slide">
<div id="wrapper">
123
</div>
直接绑定不是一个连续的过程。它用于过滤匹配元素以附加事件处理程序。如果在绑定评估时它们不匹配,则不会附加处理程序。
您可以通过使用委托绑定来解决这个问题,委托绑定将评估来自子项的冒泡事件以查看逻辑是否应该处理。
$( "#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
}
});