【问题标题】:How to unbind mouseenter (or hover)如何取消绑定 mouseenter(或悬停)
【发布时间】:2014-04-28 17:20:07
【问题描述】:

我在任务栏中有一个“开始”按钮。将鼠标悬停在它上面会显示更多选项(登录、注册、注销)。为了您的方便,我还创建了一个(简化的)JSFiddle:http://jsfiddle.net/wF43d/4/

//1. bind mouseenter / mouseleave to imitate ".hover()":
$('#start').bind({
  mouseenter: function(e) 
          {//some other positioning code goes here
          $slider.show();
          },

  mouseleave: function(e) 
          {
          $slider.hide();
        }
 });

问题是我无法用鼠标访问这些进一步的选项,因为一旦我将鼠标悬停在“开始”之外,尽管使用了 .unbind(),这些选项就会消失,但显然是错误的:

$('#logout').on({
mouseenter: function(){
    $('#start').unbind(); //this is supposed to unbind 1. but it doesn't!!!
} //more code goes here

(JSFiddle 中的第 29 行代码)。

我知道我可以简单地包含更多选项(“.start_options”)作为“.taskbar”的相对定位的子元素,并为它们设置动画以滑出任务栏的左侧;但是,任务栏的“overflow-y:scroll;”属性阻止了这种情况,由于某种原因,它也阻止了“overflow-x”。

因此,我完全定位了更多选项,并在将鼠标悬停在“开始”按钮上时显示它们,但是如何在“#start”的悬停(JSFiddle 中的“mouseleave”)时防止/取消绑定它们被隐藏“?

非常感谢!

【问题讨论】:

    标签: jquery hover mouseenter unbind


    【解决方案1】:

    无需解绑任何东西,您可以将另一个悬停绑定到您的滑块,效果很好

    $('.start_options').bind({
        mouseleave: function () {
            var $start = $(this),
                startOffset = $start.offset();
    
            $slider = $('.start_options');
            $slider.css({
                position: 'absolute',
                top: startOffset.top,
                left: startOffset.left - ($slider.width()) + 10
            });
    
            $slider.hide();
        },
    
        mouseenter: function (e) {
            $slider.show();
        }
    });
    

    http://jsfiddle.net/wF43d/5/

    【讨论】:

    • 来自 jQuery 文档:从 jQuery 1.7 开始,.on() 方法是将事件处理程序附加到文档的首选方法。对于早期版本, .bind() 方法用于将事件处理程序直接附加到元素。处理程序附加到 jQuery 对象中当前选定的元素,因此这些元素必须存在于调用 .bind() 的位置。更灵活的事件绑定见.on().delegate()中关于事件委托的讨论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多