2013-09-26 5 views
12

Mam problem ze zdarzeniem przewijania.Dołącz zdarzenie przewijania do elementu div z body on() binding zawiedzie

Próbuję dołączyć/powiązać zdarzenie do konkretnego div, i używam $('body').on() to zrobić, ze względu na fakt, że treść jest ładowany podczas sortowania, więc utraci ona wiążąca.

ten nie działa, zdarzenie nie jest opalane:

$('body').on('scroll', 'div.dxgvHSDC + div', function() { 
} 

ten z drugiej strony działa:

$('body').on('mousewheel DOMMouseScroll', 'div.dxgvHSDC + div', function() { 
} 

I to także:

$('div.dxgvHSDC + div').on('scroll', function() { 
} 

Co problem?

Odpowiedz

27

Nie możesz dodać delegacji do wydarzenia scroll. To zdarzenie nie powoduje bańki w DOM i dlatego nie można jej delegować do żadnego elementu. Można znaleźć więcej informacji here:

Zdarzenie przewijania nie robi się bańka.

Chociaż zdarzenie nie jest bańka, przeglądarki uruchamiają zdarzenie przewijania zarówno dokumentu, jak i okna, gdy użytkownik przewija całą stronę.

Musisz utworzyć obsługę zdarzeń wewnątrz zdarzenia, które tworzy przewijany element.

żywym przykładem: http://jsfiddle.net/Um5ZT/1/

$('#link').click(function(){ 

    //dynamically created element 
    $('body').append('<div class="demo"></div>'); 

    //dynamically added event 
    $('.demo').on('scroll', function() { 
     alert('scrolling'); 
    }); 

}); 
+0

Dzięki! Znaleziono tę samą stronę wczoraj. Odtworzony słuchacz na końcu wywołania zwrotnego bezpośrednio na elemencie. – Jompis

12

W nowoczesnych przeglądarek (IE> 8), można uchwycić scroll zdarzenie np document poziom dynamicznego elementu. Ponieważ jQuery nie implementuje fazy przechwytywania, należy użyć metody javascript: addEventListener():

document.addEventListener(
    'scroll', 
    function(event){ 
     var $elm = $(event.target); 
     if($elm.is('div.dxgvHSDC + div')){ // or any other filtering condition 
      // do some stuff 
      console.log('scrolling'); 
     } 
    }, 
    true // Capture event 
); 
+0

To jest moja preferowana odpowiedź i powinna być zaakceptowaną odpowiedzią. –

Powiązane problemy