2016-07-23 68 views
0

你好,我知道关于“on”的方法,这里的大部分关于“on”的答案都不是特定的。有人可以帮我解决这个问题吗?如何让jquery脚本在Ajax dom追加后工作?

$(function(){ 

var pagePositon = 0, 
    sectionsSeclector = 'article#sector', 
    $scrollItems = $(sectionsSeclector), 
    offsetTolorence = 30, 
    pageMaxPosition = $scrollItems.length - 1; 

//Map the sections: 

$scrollItems.each(function(index,ele) { $(ele).attr("debog",index).data("pos",index); }); 

// Bind to scroll 
$(window).bind('scroll',upPos); 

//Move on click: 
$(document).keypress(function(e) { 
    if (e.which == 100 && pagePositon+1 <= pageMaxPosition) { 
     pagePositon++; 
     $('html, body').stop().animate({ 
       scrollTop: $scrollItems.eq(pagePositon).offset().top 
     }, 300); 
    } 
    if (e.which == 97 && pagePositon-1 >= 0) { 
     pagePositon--; 
     $('html, body').stop().animate({ 
       scrollTop: $scrollItems.eq(pagePositon).offset().top 
      }, 300); 
     return false; 
    } 
}); 

//Update position func: 
function upPos(){ 
    var fromTop = $(this).scrollTop(); 
    var $cur = null; 
    $scrollItems.each(function(index,ele){ 
     if ($(ele).offset().top < fromTop + offsetTolorence) $cur = $(ele); 
    }); 
    if ($cur != null && pagePositon != $cur.data('pos')) { 
     pagePositon = $cur.data('pos'); 
    }     
} 
}); 

当你按下“d”或“a”它会转到next或prev id =“sector”,那很好。但偶尔,在Ajax Call和新文章追加后,脚本无法移动到它们。我知道他们没有绑定(在刷新dom后)以及如何在Ajax dom更改后使脚本生效?

+1

_it转到下一个或prev与id =“扇区”_ds必须是**唯一的** – Andreas

+0

您必须更新'$ scrollItems'。否则,它只包含分配时出现的元素。 – Andreas

+0

我知道它,所以我需要一个明显的例子,伙计们。我甚至不能谷歌的例子来解决我的问题。 – MonkeyCoder

回答

0

解决:

$(function(){ 

var pagePositon = 0, 
    sectionsSeclector = 'article#sector', 
    $scrollItems = $(sectionsSeclector), 
    offsetTolorence = 30, 
    pageMaxPosition = $scrollItems.length - 1; 

//Map the sections: 


// Bind to scroll 


//Move on click: 
$(document).on('keypress', function(e) { 
    $scrollItems = $(sectionsSeclector); 
    pageMaxPosition = $scrollItems.length - 1; 
    $scrollItems.each(function(index,ele) { $(ele).attr("debog",index).data("pos",index); }); 

    $(window).bind('scroll',upPos); 

    if (e.which == 100 && pagePositon+1 <= pageMaxPosition) { 
     pagePositon++; 
     $('html, body').stop().animate({ 
       scrollTop: $scrollItems.eq(pagePositon).offset().top 
     }, 300); 
    } 
    if (e.which == 97 && pagePositon-1 >= 0) { 
     pagePositon--; 
     $('html, body').stop().animate({ 
       scrollTop: $scrollItems.eq(pagePositon).offset().top 
      }, 300); 
     return false; 
    } 
}); 

//Update position func: 
function upPos(){ 
    var fromTop = $(this).scrollTop(); 
    var $cur = null; 
    $scrollItems.each(function(index,ele){ 
     if ($(ele).offset().top < fromTop + offsetTolorence) $cur = $(ele); 
    }); 
    if ($cur != null && pagePositon != $cur.data('pos')) { 
     pagePositon = $cur.data('pos'); 
    }     
} 

});