Jquery 仅在mouseover(或mouseout)上执行代码的最佳实践

Jquery 仅在mouseover(或mouseout)上执行代码的最佳实践,jquery,hover,mouseover,mouseout,Jquery,Hover,Mouseover,Mouseout,我想在悬停元素时执行代码。当指针离开时,我不希望任何事情发生。这段代码正是我想要的: $('li').hover(function() { // actions here }, function() { }); $('ul').hover(function() { }, function() { // other actions here }); 但是很难看。我希望这个更干净的版本能够工作: $('li').mouseover(function() { // actions he

我想在悬停元素时执行代码。当指针离开时,我不希望任何事情发生。这段代码正是我想要的:

$('li').hover(function() {
  // actions here
},
function() {
});

$('ul').hover(function() {
},
function() {
  // other actions here
});
但是很难看。我希望这个更干净的版本能够工作:

$('li').mouseover(function() {
  // actions here
});

$('ul').mouseout(function() {
  // other actions here
});
但事实并非如此。鼠标悬停部分在我将指针移到元素上时持续触发,而不是触发一次


有什么建议吗?

您可以使用鼠标指针,而不是您可能想使用的鼠标指针

像这样的方法应该会奏效:

$'ul'。关于'mouseover','li',函数{ 控制台。日志“悬停”; };

当我将指针移到元素上时,鼠标悬停部分会持续启动, 而不是开火一次

您可以使用一个标志只执行一次代码块,但是,这并不能阻止事件多次重新触发,它只会忽略第一次之后的事件

var flag = true;
$('li').mouseover(function() {
   if(flag){

   // actions here
    flag = false;
   }
});
尽管如此,我还是建议调查一下

片段

列表项 列表项 列表项 列表项 列表项 var标志=真; $'li'.mouseoverfunction{ 伊夫拉格{ 控制台测试; //这里的行动 flag=false; } }; $'ul'.mouseoutfunction{ //这里的其他行动 }; 在您输入的li中添加活动类…离开ul时删除所有活动类


使用标志并在第一次激发后将其设置为false。当悬停任何li元素时,我会显示与每个li元素关联的背景图像。当鼠标悬停在整个列表之外时,我想切换回默认的背景图像。在li元素之间悬停时,我不想切换到默认图像。
$('li').mouseenter(function(){
  $(this).addClass('active');
});

$('ul').mouseleave(function(){
  $(this).find('.active').removeClass('active');
})