0

そのため、リスト内の次の10個のアイテムを表示するブロックがある検索ページで作業しています。私がやりたいのは、リストの最後に達したときにこのブロックを非表示にすることです。

function loadMore() {
    //Load the content
    var urlPortion = searchQuery.split("?");
    var urlString = "?hits=10&offset=";
    var offset = 0;
    var pageCounter = 1;

    $(".box-footer").click(function () {
        offset += 10;
        pageCounter++;
        var urlBuilder = urlPortion[0] + urlString + offset + "&" + urlPortion[1];

        $.get(urlBuilder, function (data) {
            var content = $(".search-result-list li", data);
            $('.search-result-list').append(content);
        });
    });

    //Visibility of "Show more"-bar
    var textString = $(".search-result-totalhits").html();
    var totalHitsString = /\d+/;
    var totalHits = textString.match(totalHitsString);
    var numberOfPages = (Math.ceil(totalHits/10));

    if ((totalHits > 10) && (pageCounter < numberOfPages)) {
        $(".p-sok .box-footer").show();
    }
    else {
        $(".p-sok .box-footer").hide();
    }
};

ここでの私の問題は、ブロックを表示するかどうかを実際にチェックする最後の条件が常に真のままであるということです。変数「pageCounter」は上記のクリック関数以外では使用できないと思いますが、よくわかりません。18行目で変数をコンソールに出力しようとしましたが、何も出力されません。

誰かが私にソムのヒントを教えてくれませんか?

4

1 に答える 1

0

可変スコープで問題が発生しているのは正しいです。クリックイベントのコールバックは、LoadMore関数とは異なるコンテキストで呼び出されます。LoadMoreは、実際に実行される場所ではなく、宣言する場所です。コールバック関数とLoadMoreの両方で変数にアクセスできるようにする場合は、loadMore関数の外部でpageCounterをグローバルとして宣言する必要があります。だから次のようなもの:

var pageCounter = 1;

function loadMore() {
    //Load the content

とはいえ、実際には、「//「もっと見る」バー」の表示以降のすべてをクリックハンドラーに移動したいと思います。リスト内の現在の場所に基づいてヘッダーを表示または非表示にしたいからです。クリックするたびに更新されますよね?もしそうなら、次のようなことを試してください:

var pageCounter = 1;

function loadMore() {
    //Load the content
    var urlPortion = searchQuery.split("?");
    var urlString = "?hits=10&offset=";
    var offset = 0;

    $(".box-footer").click(function () {
        offset += 10;
        pageCounter++;
        var urlBuilder = urlPortion[0] + urlString + offset + "&" + urlPortion[1];

        $.get(urlBuilder, function (data) {
            var content = $(".search-result-list li", data);
            $('.search-result-list').append(content);
        });

       //Visibility of "Show more"-bar
       var textString = $(".search-result-totalhits").html();
       var totalHitsString = /\d+/;
       var totalHits = textString.match(totalHitsString);
       var numberOfPages = (Math.ceil(totalHits/10));

       if ((totalHits > 10) && (pageCounter < numberOfPages)) {
           $(".p-sok .box-footer").show();
       }
       else {
           $(".p-sok .box-footer").hide();
       }
    });
};
于 2013-01-31T15:50:30.307 に答える