我的条件不读取所选变量

时间:2013-01-31 15:44:52

标签: javascript jquery

所以我在搜索页面上工作,我有一个块,显示列表中的下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行将变量输出到控制台,但它不会输出任何内容。

有人在乎给我一些暗示吗?

1 个答案:

答案 0 :(得分:0)

你是否正确遇到变量范围问题。 click事件的回调在与LoadMore函数不同的上下文中调用。 LoadMore就是您声明它而不是实际运行的位置。如果您希望能够在回调函数和LoadMore中访问变量,则需要将pageCounter声明为LoadMore函数之外的全局变量。如下所示:

var pageCounter = 1;

function loadMore() {
    //Load the content

那说我实际上认为你想在“// Visibility of”之后移动所有内容。在点击处理程序中显示更多“-bar”。我之所以这么说是因为您想根据列表中的当前位置显示或隐藏标题。每次点击都会更新,对吧?如果是这样,请尝试以下方法:

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();
       }
    });
};