删除事件侦听器 AJAX

remove event listener ajax

提问人:Yoeri Achterbergen 提问时间:8/29/2018 更新时间:8/29/2018 访问量:824

问:

使用jQuery,我创建了一个带有GET方法的ajax调用。如果用户滚动到底部,则会触发此请求。如果 ajax 调用正在运行,我想删除滚动侦听器。如果 ajax 调用成功,请添加 scroll 函数。我尝试过使用unbind,但这不起作用。

有人可以帮助我吗?

window.onscroll = function(ev) {
        if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
            $(window).unbind('scroll');
            //ajax call
            $.ajax({
                type: "GET",
                url: "result.php",
                data: {
                    'offset': flag,
                    'limit':12
            },
            success: function(data){
                $('.gallery').append(data);
                flag += 12;
            }
            });
        }
    };
jQuery AJAX

评论

0赞 Death-is-the-real-truth 8/29/2018
尝试$(window).off('scroll');
0赞 Turnip 8/29/2018
@AlivetoDie 仅当事件侦听器附加了.on()
0赞 Turnip 8/29/2018
您应该能够使用window.onscroll = null;

答:

0赞 Luca Kiebel 8/29/2018 #1

将 eventListener 中执行的函数命名为 function,并使用 / 删除侦听器:.on().off()

$(window).on("scroll", windowScroll);


function windowScroll(ev) {
  if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
    $(window).off('scroll', windowScroll); // remove the listener on scroll
    //ajax call
    $.ajax({
      type: "GET",
      url: "result.php",
      data: {
        'offset': flag,
        'limit': 12
      },
      success: function(data) {
        $('.gallery').append(data);
        flag += 12;
        $(window).on("scroll", windowScroll); // re-attach it when the request is finished
      }
    });
  }
};