javascript
  • jquery
  • children
  • show-hide
  • onmouseover
  • 2010-09-07 202 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

    相關問題