使用Javascript获取URL Vars,在QueryString中存在多个值时不工作

时间:2010-05-17 13:32:47

标签: javascript jquery query-string

我使用Javascript函数获取URL的值,使用以下函数传递给jQuery:

 function getUrlVars()
    {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
    return vars;
    }

然后像这样设置值:

 var type = getUrlVars()["type"]

这一切都很完美,但是我刚刚遇到需要获取多个值的情况,我的一个表单元素是可以检查多个值的复选框,所以我的URL看起来像这样:

 http://www.domain.com/test.php?type=1&cuisine[]=23&cuisine[]=43&name=test

如果我使用上述功能提醒菜肴值,我只得到最终值:

 alert (getUrlVars()["cuisine[]"]);

警告“43”。

我希望它是一个以逗号分隔的所有“美食”值的字符串。即在上面的例子中“23,43”

任何帮助都非常欢迎!如果任何解决方案需要它,我使用PHP 5.3和Jquery 1.4

4 个答案:

答案 0 :(得分:3)

    function getUrlVars()
    {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');

            if($.inArray(hash[0], vars)>-1)
            {
                vars[hash[0]]+=","+hash[1];
            }
            else
            {
                vars.push(hash[0]);
                vars[hash[0]] = hash[1];
            }
        }

        return vars;
    }

答案 1 :(得分:1)

如果vars [hash [0]]已经存在,你只需要检查你的循环,如果是,那么不要做vars [hash [0]] = hash [1];你会做变量[hash [0]] + =','+ hash [1];

答案 2 :(得分:1)

更合适的解决方案,因为查询字符串应该具有唯一键是在表单中添加隐藏字段,然后在onsubmit事件中循环选中并设置隐藏字段对聚合值的值构成了复选框。

脚本

function getValues(){
    var inputs= document.getElementById("myForm").getElementsByTagName("input"), i=inputs.length;
    var values=[];
    while (i--){
        if (inputs[i].type == "checkbox" && inputs[i].checked) {
            values.push(inputs[i].value);
        }
    }
    document.getElementById("hiddenField").value=values.join();
}

和HTML

<form id="myForm" onsubmit="getValues()">
<input type="hidden" name="values" id="hiddenField"/>
<input type="checkbox" id="chk1" value="1"/>
<input type="checkbox" id="chk1" value="2"/>
<input type="submit" value="submit"/>
</form>

这比覆盖基于键/值的参数的默认(和预期行为)要好。

答案 3 :(得分:0)

尝试this plugin