您不能像这样重新启用事件处理程序。当您使用.off()
它时,它会从元素中删除指定的事件处理程序。因此,如果要重新注册处理程序,则需要再次将处理程序引用传递给.on()
方法。
由于您需要多次使用处理程序引用,因此最好将其编写为独立函数,以便可以从多个地方引用它
你需要像这样写
$('.menu-control').on('click', function() {
$('#module-container').fadeIn(300);
window.mtimer = setTimeout(function(){ $('#module-container').fadeOut(300); }, time);
//The following commented line doesn't work. I want to reallow the mousleave function, defined below (marked as HERE)
$('#module-container').on('mouseleave', mouseenter);
});
function mouseenter(){
clearTimeout(window.mtimer);
}
function mouseleave(){
window.mtimer = setTimeout(function(){ $('#module-container').fadeOut(300); }, time);
}
var time = 2000;
$('#module-container').on({
mouseenter: mouseenter,
//HERE
mouseleave: mouseleave
});
$('.stopme').on('click', function(e) {
$('#module-container').show().off('mouseleave');
e.preventDefault();
});