遇到混合点击和悬停事件的问题。
单击非活动的li a元素切换活动类并绑定悬停事件。 将鼠标悬停在现在的活动元素上会显示以前隐藏的块(span.rate) 单击悬停元素应该隐藏它,删除悬停事件并切换父级上的活动类,使其不再“活动”。
单击悬停事件不会删除事件并切换为活动状态。关于互斥选项还有一些其他的逻辑,但这一切都很好。
jsfiddle它们如何坐在一起:
当前的js:
ps = {
psToggle: 0,
init: function () {
$(document).ready(function () {
$('.example li a)').on('click', function(e) {
e.preventDefault();
var that = $(this);
if (that.parent().hasClass('paired')) {
if (rm.psToggle === 0) {
that.toggleClass('active');
that.find('.rate').fadeToggle(50);
rm.psToggle = 1;
} else {
if (that.hasClass('active')) {
that.toggleClass('active');
that.find('.rate').fadeToggle(50);
rm.psToggle = 0;
} else {
$('.paired a').toggleClass('active');
that.find('.rate').fadeToggle(50);
//Call message function
}
}
rm.pControl();
} else {
that.toggleClass('active');
that.find('.rate').fadeToggle(50);
rm.pControl();
}
});
});
},
pControl: function () {
//Unbind events to all control items excluding 1st item.
$('.example li a').off('hover');
$('.example li a .rate').off('click');
$('.example .active').each(function(i) {
$(this).on('hover', function() {
$(this).find('.rate').fadeToggle(50);
});
});
$('.example li a.active .rate').on('click', function() {
//Remove hover/hide and toggle active state
$(this).off('hover');
$(this).hide();
$(this).parent().toggleClass('active');
rm.pControl(); //rebind new active classes
});
}
};
ps.init();
答案 0 :(得分:1)
答案 1 :(得分:1)
检查以下演示。
点击事件都被触发,.rate
是a
的孩子。
$('.example li a.active .rate').on('click'...
和
$('.example li a').on('click'...
.rate
上的点击。的 Demo1 强> 或者向孩子添加e.stopPropagation();
以停止从父级到子级的事件冒泡。的 Demo2 强>
$('.example li a.active .rate').on('click', function(e) {
e.stopPropagation();
//Remove hover/hide and toggle active state
$(this).off('hover');
$(this).hide();
$(this).parent().toggleClass('active');
ps.pControl(); //rebind new active classes
});