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); というステートメントが表示されます。に達し、「concetenationCharacter」と「checkboxName」の値が正しいことがわかります。では、なぜ私の関数は "" を返すのでしょうか?

これはおそらく変数のスコープの問題か何かです。私はそれが単純なものだと推測しています。ありがとう!

4

3 に答える 3

1

concat()は値を返します...。

その値を収集...行queryString.concat(concatenationCharacter).concat(checkboxName);

このようなものでなければなりません

queryString = queryString.concat(concatenationCharacter).concat(checkboxName);
于 2012-05-28T11:21:10.593 に答える
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

私はそれをテストしていませんが、私は次のようなことをするだろうと思います

$(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 に答える