Подтвердить что ты не робот

JQuery.on('scroll') не запускает событие при прокрутке

Событие прокрутки не запускается при прокрутке ul. Я использую jQuery версии 1.10.2. Когда я загружаю ul с страницы ajax, я не мог использовать $('ulId').on('scroll', function() {}); или другие методы live. Пожалуйста, помогите мне найти решение.

$(document).on( 'scroll', '#ulId', function(){
    console.log('Event Fired');
});
4b9b3361

Ответ 1

Вы, вероятно, забыли дать # перед идентификатором для селектора идентификаторов, вам нужно дать # перед id, т.е. будет ulId

Вероятно, вам нужно привязать событие прокрутки к div, который содержит ul и scrolls. Вам нужно связать событие с div вместо ul

$(document).on( 'scroll', '#idOfDivThatContainsULandScroll', function(){
    console.log('Event Fired');
});

Изменить

Выше не будет работать, потому что событие прокрутки не всплывает в DOM, который используется для делегирования события, см. этот вопрос почему не делегировать работу для прокрутки?

Но с современными браузерами> IE 8 вы можете сделать это другим способом. Вместо делегирования с использованием jquery вы можете сделать это с помощью захвата событий с помощью java-скрипта document.addEventListener с третьим аргументом как true; Посмотрите, как пузыри и захвата работают в этом учебнике.

Демоверсия в реальном времени

document.addEventListener('scroll', function (event) {
    if (event.target.id === 'idOfUl') { // or any other filtering condition        
        console.log('scrolling', event.target);
    }
}, true /*Capture event*/);

Если вам не нужно делегировать событие, вы можете привязать событие прокрутки непосредственно к ul, а не делегировать его через document.

Демоверсия в реальном времени

$("#idOfUl").on( 'scroll', function(){
   console.log('Event Fired');
});

Ответ 2

Привязка события прокрутки после загрузки пользователем с использованием ajax решила проблему. В моих выводах $(document).on('scroll', '#id', function() {...}) не работает и не связывает событие прокрутки после того, как найденная работа ajax работает.

$("#ulId").bind('scroll', function() {
   console.log('Event worked');
}); 

Вы можете отменить событие после удаления или замены ul.

Надеюсь, это может помочь кому-то.

Ответ 3

Используя VueJS, я пробовал каждый метод в этом вопросе, но никто не работал. Поэтому, если кто-то борется с тем же:

mounted() {
  $(document).ready(function() { //<<====== wont work without this
      $(window).scroll(function() {
          console.log('logging');
      });
  });
},

Ответ 4

Другой вариант:

$("#ulId").scroll(function () { console.log("Event Fired"); })

Ссылка: Здесь

Ответ 5

$("body").on("custom-scroll", ".myDiv", function(){
    console.log("Scrolled :P");
})

$("#btn").on("click", function(){
    $("body").append('<div class="myDiv"><br><br><p>Content1<p><br><br><p>Content2<p><br><br></div>');
    listenForScrollEvent($(".myDiv"));
});


function listenForScrollEvent(el){
    el.on("scroll", function(){
        el.trigger("custom-scroll");
    })
}

см. этот пост - Связать прокрутку события с динамическим DIV?

Ответ 6

Можете ли вы поместить #ulId в документ до загрузки ajax (с помощью css display: none;) или обернуть его в содержащий div (с помощью css display: none;), а затем просто загрузить внутренний html во время ajax загрузка страницы, таким образом событие прокрутки будет связано с div, который уже существует до ajax?

Затем вы можете использовать:

$('#ulId').on('scroll',function(){ console.log('Event Fired'); })

очевидно, заменяя ulId любым действительным идентификатором прокручиваемого div.

Затем установите css display: block; на #ulId (или содержащий div) при загрузке?

Ответ 7

Я знаю, что это довольно старая вещь, но я решил такую ​​проблему: У меня родительский и дочерний элементы прокручивались.

   if ($('#parent > *').length == 0 ){
        var wait = setInterval(function() {
            if($('#parent > *').length != 0 ) {
                $('#parent .child').bind('scroll',function() {
                  //do staff
                });
                clearInterval(wait);
            },1000);
        }

Проблема была в том, что я не знал, когда ребенок загружается в DOM, но я продолжал проверять его каждую секунду.

ПРИМЕЧАНИЕ. Это полезно, если это произойдет в ближайшее время, но не сразу после загрузки документа, иначе он будет использовать вычислительную мощность клиентов без причины.