我正在使用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
功能?
答案 0 :(得分:1)
jQuery的最新方式是使用on
方法,该方法具有重载以替换bind
,live
和delegate
方法。
代码的等价物是将委托绑定到body元素:
$(document.body).on('inview', '.nthCunt', function () {
但是,如果可能,您应该将它绑定到更靠近发生事件的元素的元素,这样代码就不必检查页面中发生的每个此类事件的选择器。