0

jQuery scrollTo プラグインに問題があります。2 つの DIV (nav2content) があり、ajax 呼び出しでそれらを埋めています。

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-Plugin-function をラップする -function を介して行われますscrollTogoajax 呼び出しのラッパーです。get-Request を作成する前に、指定された入力パラメーターからファイル名と ID (「#」で分割) を抽出します。これがすべて呼び出される方法は次のとおりです。

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

編集: 1 つの DIV、nav2DIV を使用すると、すべて正常に動作します。しかし、他の DIVcontentはスクロールされる場合とされない場合があります。また、スクロールされて ai が DIV のスクロールバーを上に移動してからgo再度呼び出すと、スクロールしなくなります。nav2そして、私が言ったように、これはすべてDIVでうまく機能します...

誰かが私が間違っていることを理解していますか?

ありがとう。

4

1 に答える 1

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

doScrollToXMLHttpRequest が完了する前に呼び出しています。

これが に渡すコールバック関数の要点です。$.getすぐには実行されず、非同期 HTTP 要求が終了したときにのみ実行されます。メソッド自体はgetすぐに戻るため、コールバックは実行されず、次の行にif.

コンテンツがロードされた直後にスクロールを実行したい場合は、その呼び出しを に渡すコールバック関数内に配置する必要がありますget。ただしthis、コールバック関数では保持されないことに注意してください。そのため、それをbind使用するか、クロージャーを使用する必要があります。

var that= this;
$.get(targetFile, function(data) {
    $('#'+targetDivId).html( data );
    if(anchorId !== null){
        that.doScrollTo(targetDivId, anchorId);
    }
});
于 2010-03-03T10:23:06.177 に答える