javascript
  • jquery
  • children
  • show-hide
  • onmouseover
  • 2010-09-07 120 views 4 likes 
    4

    我想添加一个简单的延迟到一个孩子的mouseover事件并有困难。 (仍在学习!)在鼠标悬停上添加延迟到jquery事件

    这使我能够显示的延迟后弹出,但同时表示他们都:

    onmouseover='setTimeout(function() { $(\".skinnyPopup\").show(); }, 600)' 
    

    和这个作品只显示我想没有延迟弹出:

    onmouseover='$(this).children(\".skinnyPopup\").show()' 
    

    但组合不会:

    onmouseover='setTimeout(function() { $(this).children(\".skinnyPopup\").show(); }, 600)' 
    

    任何帮助,将不胜感激。谢谢!

    回答

    4

    您需要定义什么是this执行时,像这会工作:

    setTimeout($.proxy(function() { $(this).children(".skinnyPopup").show(); }, this), 600) 
    

    或者只是使用.delay(),像这样:

    $(this).children(".skinnyPopup").delay(600).show(0); 
    

    以上两者都快速修复,我建议你从内嵌处理器移开,并检查了一个unobtrusive方法(见this answerRuss Cam一些伟大的原因),例如:

    $(function() { 
        $('selector').mouseover(function() { 
        $(this).children(".skinnyPopup").delay(600).show(0); 
        }); 
    }); 
    
    +1

    +1 - 我也同意尼克关于脱离内联处理程序的看法。 – JasCav 2010-09-07 18:51:45

    +0

    谢谢,这有助于我的理解。似乎一切都变得古怪,如果内联完成。不知道为什么,但我确定知道现在就避免它! – TLK 2010-09-09 15:15:39

    +0

    @TLK-欢迎:)如果它解决了你的问题一定要接受作为答案,如果不是让我知道你还有什么问题:) – 2010-09-09 15:20:09

    0

    这是因为this绑定到全局上下文,而不是元素。使用类似以下代替:

    // put this in your document head -- replace element with a selector for the elements you want 
    $(function() { 
        $(element).bind("mouseover", function() { 
         var e = $(this); 
         setTimeout(function() { e.children(".skinnyPopup").show(); }, 600); 
        }); 
    }); 
    

    如果你是坚定的关于联事件处理程序,下面还应该工作:

    onmouseover='var self = this; setTimeout(function() { $(self).children(\".skinnyPopup\").show(); }, 600)' 
    
    +0

    谢谢!尚未使用bind()。必须接下来检查。 – TLK 2010-09-09 15:18:13

    相关问题