2011-09-08 39 views
5

tôi có kịch bản sau đây kích hoạt tính năng di chuột qua và di chuột luôn luôn hai lần! bạn đề nghị tôi làm gì sai (unbind, return e.g.)? tôi đã thử một vài điều nhưng không có gì hữu ích.sự kiện jquery delegate() (mouseout mouseout) kích hoạt hai lần

đây là mã:

$('#container').delegate('div.showmenu', 'mouseover mouseenter mouseout mouseleave', function(e){ 
    if (e.type === 'mouseover' || e.type==='mouseenter') { //jIE requires mouseenter, does not fire mouseover         
     if($(this).parents().closest('div').hasClass('whatever')){    
      alert(e.type); //double-alerts mouseover 

      menu.show(); 

    foldercmenu.hover(
     function(){ 
      $(this).show();        
     }, 
     function(){ 
      $(this).hide();            
     } 
    );        

     }else { 
    //do other stuff :-) 
    }            
    }else if(e.type==='mouseout' || e.type==='mouseleave'){ //IE requires mouseleave, does not fire mouseout 
     alert(e.type); //double-alerts mouseout 
     menu.hide(); 
     $(this).unbind('mouseover mouseenter mouseout mouseleave'); 
    } 
    //return false; 
}); 

Trả lời

7

mouseovermouseout một kích hoạt khi bạn nhập/rời khỏi một đứa trẻ của nguyên tố này, có lẽ đó là hiệu ứng mà bạn đang nhìn thấy.

Một vấn đề khác là bạn đang ràng buộc xử lý cho cả hai, mouseovermouseenter (và mouseleavemouseout).

Chỉ liên kết với mouseentermouseleave. jQuery đã quan tâm đến sự khác biệt của trình duyệt.

+1

Đây là vấn đề sự kiện kém tài liệu ... Cảm ơn bạn đã đề cập đến nó. Đã cho tôi một thời gian rất dài để tìm thấy điều này. Trong tình huống của tôi, hành vi bạn đề xuất (mouseover & mouseout bắn một lần nữa khi bạn nhập/rời các nút con) chỉ xuất hiện trong IE <10 - tất cả các trình duyệt hiện đại dường như hiểu rằng tôi chỉ quan tâm đến việc xử lý sự kiện cho phần tử được cung cấp và không phải cho tất cả các con của nó. Ngay cả stopPropagation/stopImmediatePropagation cũng không ảnh hưởng đến điều này đối với tôi. – 1nfiniti

Các vấn đề liên quan