2010-07-29 20 views
12

Birçok li öğeyle birlikte bir ul öğem var:Hover() ile delegate() kullanma?

<ul> 
    <li></li> 
    ... 
</ul> 

kullanıcı fareyi bir li öğenin üzerinde gezdirdiğinde, gezinirken durduklarında bazı gizli düğmeler göstermek istiyorum, düğmelerini tekrar gizleyin . Temsilci kullanmaya çalışıyorum:

$("#myList").delegate("li", "hover", function() { 
    if (iAmHovered()) { 
     showButtons(); 
    } else { 
     hideButtons(); 
    } 
}); 

Yukarıdakiler hem vurgulu hem de 'un-hover' için çağrılır. Bir izin ya da giriş olsa bile nasıl ayırt edebilirim?

Ayrıca, bu sorudan şu örneği aldım: .delegate equivalent of an existing .hover method in jQuery 1.4.2

Nick'in söylediği:

Bu, [#myList] AJAX ile değiştirilmemesine veya başka bir şekilde değiştirilmemesine bağlıdır. Olay işleyicisinin yaşadığı yer.

#myList'in içeriğini değiştirdim, ama şunu kullanarak:

$("#myList").empty(); 

sorun yaratacak mı?

Teşekkürler

cevap

19

Bu gibi bir etkinlik türü için test etmek gerekir:

$("#myList").delegate("li", "hover", function (event) { 
    if (event.type == 'mouseover') { 
     showButtons(); 
    } else { 
     hideButtons(); 
    } 
}); 

hem olayları çalıştırmak için tek işleyicisi olmadığından, biz bir ateş hangi görmek için kontrol ve uygun çalışan kodu.

iki olay türleri için iki işleyicileri kabul edebilir elemanahover doğrudan bağlayıcı aksine.


DÜZENLEME: jQuery 1.4.3 itibariyle .delegate() veya .live() ile 'hover' kullanılırken de olay tipi (olması gerektiği gibi), artık mouseover/mouseout olduğu not edin. Şimdi onlar olayları olmayan köpüren ediyoruz çünkü sadece aptalca görünüyor mouseenter/mouseleave olacak. işleri

if (event.type == 'mouseenter') { 
    //... 
+0

Serin sayesinde:

Yani if() deyimi gibi görünecektir. – user246114

0

Bunu olay argüman özen böylece işleyici işlevi bildirmek ve sonra türünü kontrol edebilirsiniz.