2010-03-03 97 views
0

我遇到了jQuery scrollTo插件的問題。 我有2倍的DIV(nav2content),我通過Ajax調用填充它們:jQuery scrollTo滾動兩個DIV的問題

var myJs = { ... 
getWithAjax : function(targetFile, targetDivId, anchorId) { 
    // get is jquery function and wraps ajax call 
    $.get(targetFile, function(data) { 
     $('#'+targetDivId).html(data); 
     if(anchorId !== null){ 
      myJs.doScrollTo(targetDivId, anchorId); 
     } 
    }); 

}, 

go : function(file1, file2) { 
    var file1Array, file2Array = new Array(); 
    if(file1 !== null){ 
     file1Array = this.splitLinkFromAnchor(file1); 
     // update nav2 div 
     this.getWithAjax(file1Array[0], "nav2", file1Array[1]); 
    }, //... same with file2 but other div "content" 

doScrollTo : function(divId, anchorId) { 
    $('#' + divId).scrollTo('#' + anchorId, 0); 
} 
// ... further functions 
} // end of object literal 

正如你看到的,讓我追加,然後內容後試圖滾動到某一位置該目標通過一個anchorId div。這是通過doScrollTo函數完成的,該函數包裝了jQuery插件函數scrollTogo是ajax調用的包裝。在進行get-Requests之前,它會從給定的輸入參數中提取文件名和id(由'#'分割)。 下面是這一切是怎麼叫:

myJs.go('file_a.html#anchor1', 'file_b.html#anchor2');"

編輯:隨着一個DIV,該DIV nav2,一切工作正常。但其他DIV content有時滾動,有時不滾動。而且,如果它滾動,並且我將DIV的滾動條向上移動,然後再次調用go,則它不再滾動。正如我所說,這一切工作正常與nav2 DIV ...

有人知道我在做什麼錯了嗎?

謝謝。

回答

0
$.get(targetFile, function(data) { 
    $('#'+targetDivId).html(data); 
}); 
if(anchorId !== null){ 
     this.doScrollTo(targetDivId, anchorId); 
} 

你調用doScrollTo了XMLHttpRequest完成之前。

這就是您傳遞給$.get的回調函數的全部要點,它不會立即執行,而只會在異步HTTP請求完成時執行。 get方法本身立即返回,因此在到達帶有if的下一行時,回調沒有運行並填充內容。

如果您希望在加載內容後滾動發生,您需要將該調用放到您傳遞給get的回調函數中。但是請注意,this不會保留回調函數,所以你必須bind,或使用封閉:

var that= this; 
$.get(targetFile, function(data) { 
    $('#'+targetDivId).html(data); 
    if(anchorId !== null){ 
     that.doScrollTo(targetDivId, anchorId); 
    } 
}); 
+0

THX,那是解決VAL錯誤。 我的意思是,這就是異步調用的工作方式.... :) 但是另一個不當行爲仍然存在=>我編輯了我的問題。 – sebastianwerler 2010-03-03 10:30:35