jquery body委托鼠标悬停和mouseout同时触发

Nik*_* So 3 jquery delegates

我有一个代理人在鼠标悬停和mouseout上等待类缩略图元素

 $('body').delegate('.thumbnail', 'mouseover mouseout', function(e){
            if(e.type=='mouseover' && !isMousingOver ){
              enlarge_thumbnail(this);
              isMousingOver = true;
              console.log('enlarged')
            }else if(e.type=='mouseout'){
              reset_thumbnail(this);
              isMousingOver = false;
              console.log('resetting')
            }
        })
Run Code Online (Sandbox Code Playgroud)

但每当我在div.thumbnail元素的边界内移动鼠标时,我会在日志中放大重置放大重置放大重置放大重置...

其中enlarge_thumbnail和reset_thumbnail是:

function enlarge_thumbnail(element_to_set, how_much) {
    element_to_set = $(element_to_set); // jQueryize the element;
          how_much = parseInt(how_much);// Make sure it's an intger;
    if( element_to_set.length && !isNaN(how_much) ){
      element_to_set.css({width:how_much});
    }
  }

function reset_thumbnail(element_to_reset) {
    element_to_reset = $(element_to_reset); // jQueryize the element;
    element_to_reset.css({width:'200px'});
  }
Run Code Online (Sandbox Code Playgroud)

如果我不移动鼠标,并且鼠标在div.thumbnail元素的边界内是静止的,那么它就可以实现我想要的:放大缩略图而不是重置它.

可能是什么问题?

use*_*716 5

这是因为通过设计,mouseover并且mouseout当你进入/离开的后代火处理.thumbnail为好.

为避免这种情况,请使用mouseentermouseleave不是.这些事件不会起泡,因此只有在进入/离开.thumbnail它们所绑定的元素时才会触发.