0

window.location.hash で複数の値を使用するスクリプトを作成しようとしていますが、jquery の $.extend() 関数に問題があります

2つの方法を試しましたが、どちらもうまくいきませんでした。

var MultiHash = {
    params: {},

    getHash: function () {
        var hashString = document.location.hash.replace('#', '').split('&');

        for (var i=0; i < hashString.length; i++) {
            var key = hashString[i].split('=')[0];
            var value = decodeURIComponent(hashString[i].split('=')[1]);

            // First way
            var a = {key: value};

            // Second way
            var a = {};
            a[key] = value;

            $.extend(params, a);
        }

        return params;
    },

    ...
}

誰かが問題を見ていますか?

4

3 に答える 3

3

最初に書くべきです:

 $.extend(this.params, a); or you cant access param

他の問題があるかもしれません。

編集

私の意見では、 this.params の代わりに a を返すのは理にかなっています。

$.extend(a,this.params);

return a 
于 2012-05-18T16:00:56.323 に答える
3

あなたがやろうとしていることには2つの問題があります。1 つ目は、そのオブジェクトの params 変数を として参照する必要があるため、参照の問題this.paramsです。2 番目の問題は、オブジェクト拡張の結果を保存していないことです。これはすべて、次の行で発生します。

$.extend(params, a);

代わりに、次のように読む必要があります。

this.params = $.extend(this.params, a);
于 2012-05-18T16:04:08.403 に答える
0

これを試してください:

var MultiHash = {
    params: {},

    getHash: function () {
        var hashString = document.location.hash.replace('#', '').split('&');

        var a = [];
        for (var i=0; i < hashString.length; i++) {
            var key = hashString[i].split('=')[0];
            var value = decodeURIComponent(hashString[i].split('=')[1]);
            a.push(key + ":'" + value + "'");           
        }

        $.extend(this.params,(new Function("return {" + a.Join(",") + "}"))());

        return this.params;
    },

    ...
}
于 2012-05-18T16:04:28.777 に答える