我正在尝试使用jquery bind而不是live,但我的函数似乎只触发一次

时间:2014-02-24 21:45:49

标签: jquery

我正在使用jquery“inView”插件来检测元素是否在视口中,当它触发ajax请求以加载更多元素时。

我目前的功能如下:

  function nth_view(){
    var elem = $('#sglsPosts .sglsPostContainer:last-child');
    elem.addClass('nthCunt');
    }nth_view();

function sidebarScroll() {
    var offset = 0;
    $('.nthCunt').live('inview', function () {
        var $this = $(this);
        if ($this.hasClass('nthCunt')) {
            $this.removeClass('nthCunt');
            var singlePost = $('#sglsPosts');
            var ajax_url = singlePost.attr('data-url');
            var cat = singlePost.attr('data-cat');
            var loadDiv = $(".loadDiv");
            offset = parseInt(offset) + 10;
            $.ajax({
                dataType: "HTML",
                url: ajax_url,
                type: 'POST',
                data: {
                    action: 'side_scroll',
                    offset: offset,
                    cat: cat
                },
                beforeSend: function () {
                    /*loadDiv.show(); //show image loading*/
                },
                success: function (data) {
                    $('#sglsPosts nav').append(data);
                    nth_view();
                }
            });
        }
    });
}
sidebarScroll();

我需要升级我的jQuery,但当我live成为一个无法识别的方法时,我需要使用bind,但是当我执行我的功能时,似乎只会触发一次。

为什么它只运行一次,如何使用bind功能?

1 个答案:

答案 0 :(得分:1)

jQuery的最新方式是使用on方法,该方法具有重载以替换bindlivedelegate方法。

代码的等价物是将委托绑定到body元素:

$(document.body).on('inview', '.nthCunt', function () {

但是,如果可能,您应该将它绑定到更靠近发生事件的元素的元素,这样代码就不必检查页面中发生的每个此类事件的选择器。