2012-06-27 98 views
5

私のホームページには、無限のスクロールを使用する投稿のループがあります。ユーザーは、ajax検索などのajaxを使用して、そのループを他のループと置き換えることができます。私の問題は、無限のスクロールが最初に使用されたときだけ動作するので、メインループのためにトリガされた場合、新しいループがメインを置き換えるときには再び動作しません。新しいループが古いものを置き換えるたびに、次の関数がリロードされます。では、新しいループが呼び出されるたびに、無限スクロールをリセットして動作させるにはどうすればよいですか?新しいAjaxコンテンツで無限スクロールをリセットする方法

var href = 'first'; 
$(document).ready(function() { 
    $('#boxes').infinitescroll({ 
     navSelector: '.infinitescroll', 
     nextSelector: '.infinitescroll a', 
     itemSelector: '#boxes .box', 
     loadingImg: '<?php echo get_bloginfo('stylesheet_directory') ?>/images/loading.gif', 
     loadingText: 'Loading...', 
     donetext: 'No more pages to load.', 
     debug: false 
    }, function(arrayOfNewElems) { 
     $('#boxes').masonry('appended', $(arrayOfNewElems)); 
     if(href != $('.infinitescroll a').attr('href')) { 
      href = $('.infinitescroll a').attr('href'); 
     } 
    }); 
}); 

私はワードプレスのサイトにPual Irish infinite scroll pluginの最新バージョン2.0b2.120519を使用しています。

+1

が、あなたのコードの実際の例を参照することが可能です壊す? – rlemon

+0

閉鎖されたベータサイトですが、私はチャットであ​​なたのためのリンクを残しました。 –

答えて

3

使用しているプラ​​グインのバージョンは100%確信していませんが、最新のディストリビューションを確認しました。この操作を行うには2つの方法を実行する必要があります。

まず、あなたのajax関数では、destroy the session on successが必要です。

$.ajax({ 
    url: 'path/to/something.ext', 
    success: function(data){ 
    //call the method to destroy the current infinitescroll session. 
    $('#boxes').infinitescroll('destroy'); 

    //insert the new data into the container from the_loop() call 
    $('#boxes').html(data); 

    //reinstantiate the container 
    $('#boxes').infinitescroll({      
     state: {            
     isDestroyed: false, 
     isDone: false       
     } 
    }); 

    //call the methods you need on the container again. 
    $('#boxes').infinitescroll({ 
     navSelector: '.infinitescroll', 
     nextSelector: '.infinitescroll a', 
     itemSelector: '#boxes .box', 
     loadingImg: '<?php echo get_bloginfo('stylesheet_directory') ?>/images/loading.gif', 
     loadingText: 'Loading...', 
     donetext: 'No more pages to load.', 
     debug: false 
    }, function(arrayOfNewElems) { 
     $('#boxes').masonry('appended', $(arrayOfNewElems)); 
     if(href != $('.infinitescroll a').attr('href')) { 
     href = $('.infinitescroll a').attr('href'); 
     } 
    }); 
    } 
}); 

また、その機能作り、それに結合し、およびunbind /コードの多くを繰り返すのではなく、再バインドが、私が概説したコードはコピー+ペーストソリューションでなければなりませんでした。

+0

私はこの解決法を見ていましたが、うまく機能しませんでした。このパスには何があると思われますか?これに対して 'document ready'を使わないとしますか? –

+0

こんにちは@Ohgodwhy私はあなたのスクリプトを使用しようとしているが、デバッグで私は 'Uncaught TypeError:' appendTo 'null'メソッドを呼び出すことはできません。私は、私が電話している部門がそこにいることを1000%確信しています。このコードが最新バージョンで動作するかどうか知っていますか?ありがとうございました! – Jaypee

+0

@Jaypeeこんにちは。 jQueryが "null"のメソッドを呼び出せないというエラーを受け取った場合は、セレクタが失敗したことを意味します。どのような能力があるかもしれません。あなたのセレクタがあなたの 'appendTo()'のために簡単に私に見せてもらえますか? – Ohgodwhy

1

これができると思います。私のページで 、私は別のページを読み込むために別の要素をクリックするとワットです。これらのページもinfinitescrollになります。だから私は以下のソースを変更する:

 // creation 
     case 'object': 

      this.each(function() { 

       var instance = $.data(this, 'infinitescroll'); 

      /* if (instance) { 

        // update options of current instance 
        instance.update(options); 

       } else { 
      */ 
       $(this).removeData("infinitescroll"); 

       // initialize new instance 
       $.data(this, 'infinitescroll', new $.infinitescroll(options, callback, this)); 

     // } 

      }); 

私は、日付を削除し、新しい無限の作成を作成するたびに。毎回、すべての恵みは良いです。コール

$('#boxes').infinitescroll({      
       state: {            
        isDuringAjax: false, 
        isInvalidPage: false, 
      isDestroyed: false, 
      isDone: false, // For when it goes all the way through the archive. 
      isPaused: false, 
      currPage: 1 

       } 
      }); 
then 
$('#boxes').infinitescroll({ 
     navSelector: '.infinitescroll', 
     nextSelector: '.infinitescroll a', 
     itemSelector: '#boxes .box', 
     loadingImg: '<?php echo get_bloginfo('stylesheet_directory') ?>/images/loading.gif', 
     loadingText: 'Loading...', 
     donetext: 'No more pages to load.', 
     debug: false 
    }, function(arrayOfNewElems) { 
     $('#boxes').masonry('appended', $(arrayOfNewElems)); 
     if(href != $('.infinitescroll a').attr('href')) { 
     href = $('.infinitescroll a').attr('href'); 
     } 
    }); 

0

は、それがために

+0

あなたの答えがうまくいくと説明できるなら、あなたの答えはかなり良いでしょう。 – Ben

関連する問題