2011-01-11 16 views
0

jQueryの.htmlを使用して&それから、私は次のことをやっているwindow.scrollToは

まず、ウィンドウのスクロールバーを増加させるページ(ロット)にHTMLを挿入:

$("#XXXX").html("LOTS OF HTML").show(); 

それから私は、ページの末尾までスクロールします。

window.scrollTo(0,$(document).height()); 

問題はページがスクロールしないという問題です。私はいくつかのconsole.loggingを行いました。そして、scrollHTは、html()のインジェクションからHTMLが実行される前に実行されています。私は、HTMLを注入するJSでこれを試してみました。そして、私はHTMLインジェクションの中でスクロールを試みましたが、違いはありませんでした。

アイデア?

+0

注射はAJAX呼び出し内にありますか?挿入した後に呼び出すことも、 'setTimeout(...)'にスクロールしてブラウザに追いつく時間を与えることもできます。 –

+0

注射はAJAX呼び出し中です。私はsetTimeoutを避けたいのです。これは、常に問題を引き起こすハックです。 – AnApprentice

+0

.html()だけがコールバックを持っていたら!私はこれでかなり困惑していますが、少し考えています。 –

答えて

1

はここで試して何か:

 
$.ajax({ 
     //other params 
     //params 
     success: function(data) { 
      $("#XXXX").html(data).show(); 
     } 
     complete: function() { 
      window.scrollTo(0,$(document).height()); 
     } 
    }); 

呼び出しが成功した場合、成功関数が実行され、それがうまくいくかもしれないので、完全な機能は、その後に実行されます!

はここで別の方法としてjQuery docs on .ajax()

+0

でした。 – AnApprentice

+0

'success'ハンドラに' window.scrollTo'を置くだけで十分です。 'html'はブロッキング関数であり、パラメータなしで呼び出されたときは' show'と同様です。したがって、 'scrollTo'は実行されるまで呼び出されません。 – lonesomeday

2

だ、ここでは異なるアプローチが(誰がそれを望んで-の場合)です。私は "ScrollToBottom"関数を追加するためにjQueryを拡張しました。これをappend/html/text関数でインライン展開することができ、後に呼び出されます。

セットアップ:

;(function($){ 
    $.fn.extend({ 
     scrollToBottom: function(){ 
      window.scrollTo(0,$(document).height()); 
      return this; // allow chaining 
     } 
    }); 
    // alias in case you want to call it individually 
    $.scrollToBottom = $(document).scrollToBottom(); 
})(jQuery); 

実行:

<head> 
    $(function(){ 
     var data = ''; 
     for (var d = 0; d < 255; d++) 
      data += '<p>Hello, world from me!</p>'; 

     $('#demo').html(data).scrollToBottom(); 
    }); 
</head> 
<body> 
    <div id="demo"></div> 
</body> 

結果:jsFiddle

EDITは、それが自分自身で呼び出すことができるようにエイリアスを追加しました。

+0

私はこれを '$ .fn.scrollToBottom'と定義することは意味がありません。選択された要素へのセマンティックリンクがないので(' $ .scrollToBottom'として実装しますが)コード。 – lonesomeday

+0

@lonesomeday:あなたはまったく正しいです。それをインラインで呼び出すこと以外に理由はありません。他の関数を呼び出すことができるようにしてからスクロールを呼び出します(また、良いチェーンがあるときには簡単に(IMHO)を呼び出します) –

関連する問題