嘿,我有一个小问题。我正在对某个区域进行mouseenter和mouseleave处理:
50%已解决:
$("area.anyClass").on('mouseenter',function(){
$(this).addClass('hovered'); // works!
});
$("area.hovered").on('mouseleave',function(){
$(this).removeClass('hovered'); // does not work!
});
因此,第一部分可以正常工作,当我将鼠标悬停在
class="anyClass"
区域时,该区域将得到一个新的class="anyClass hovered"
。当我用鼠标离开该区域时,两个班级都留下来,为什么?
问候!
最佳答案
这是因为您仅在运行代码时附加一次事件侦听器(假设它在$(document).ready(
中)。没有与选择器area.hovered
匹配的元素,因此没有事件侦听器。而是使用事件委托:
$("area").on('mouseleave', '.hovered', function(){
$(this).removeClass('hovered');
});
将第二个参数设置为选择器意味着将侦听器添加到所有匹配
area
的元素,然后在mouseleave
事件上检查它们是否也匹配.hovered
,如果匹配,则调用该函数。jQuery docs on
.on