0

我是 jQuery 新手,遇到了一个问题,对于大多数前端专家来说,这可能很容易发现。

我创建了以下脚本

$(document).ready(function() {
    $("#facet_properties input[type='checkbox']").each(function() {
        $(this).click(function() {
            var queryString = getQueryString();
            $('body').load(window.location.pathname.concat(queryString));
        })
    });
});

function getQueryString() {
    var queryString = "";
    var queryStringBegun = false;
    $("#facet_properties input[type='checkbox']").each(function() {
        if ($(this).is(':checked')) {
            var checkboxFullName = $(this).attr('name');
            var checkboxName = checkboxFullName.substr(checkboxFullName.lastIndexOf('_') + 1);
            var concatenationCharacter = '&';
            if (!queryStringBegun) {
                concatenationCharacter = '?';
            }
            queryString.concat(concatenationCharacter).concat(checkboxName);
            queryStringBegun = true;
        }
    });

    return queryString;
}

我试图在 getQueryString 方法中创建一个查询字符串变量,但不知何故 queryString 保持为空。选中复选框时,我看到语句 queryString.concat(concatenationCharacter).concat(checkboxName); 已达到,我看到 'contenationCharacter' 和 'checkboxName' 具有正确的值。那么为什么我的函数返回“”?

这可能是一个变量范围问题或什么的。我猜这很简单。谢谢!

4

3 回答 3

1

concat()不会改变原始字符串。您必须将返回值分配回变量:queryString = queryString.concat(concatenationCharacter).concat(checkboxName);

但是,使用concat()有点矫枉过正:您可以简单地使用+运算符连接字符串:

queryString += concatenationCharacter + checkboxName;

与问题无关,但您可以通过将.is(':checked')检查从函数移动到选择器来缩短代码:

$("#facet_properties input[type='checkbox']:checked").each(function() {
    ...

您也不需要将点击事件单独附加到每个元素。您可以再次使用选择器。在事件中使用变量也有点不必要(除非您在实际应用程序中有更多使用它)。

$(document).ready(function() {
    $("#facet_properties input[type='checkbox']").click(function() {
        $('body').load(window.location.pathname + getQueryString() );
    });
});
于 2012-05-28T11:10:37.493 回答
1

concat() 返回一个值....

收集该值...行queryString.concat(concatenationCharacter).concat(checkboxName);

应该是这样的

queryString = queryString.concat(concatenationCharacter).concat(checkboxName);
于 2012-05-28T11:21:10.593 回答
-1

我还没有测试过,但我想我会做类似的事情

$(document).ready(function() {
    $("#facet_properties input[type='checkbox']").each(function() {
        $(this).click(function() {
            var checkboxFullName = $(this).attr('name');
            var checkboxName = checkboxFullName.substr(checkboxFullName.lastIndexOf('_') + 1);
            var concatenationCharacter = '&';
            if (!queryStringBegun) {
                concatenationCharacter = '?';
            }
            var queryString.concat(concatenationCharacter).concat(checkboxName);
            $('body').load(window.location.pathname.concat(queryString));
        })
    });
});

正如我所说,我没有测试过

于 2012-05-28T11:12:50.870 回答