Использование Javascript для получения URL Vars, не работает, когда в QueryString присутствует несколько значений - PullRequest
1 голос
/ 17 мая 2010

Я использую функцию 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 ]

3 голосов
/ 17 мая 2010
    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 голос
/ 17 мая 2010

Более правильное решение, так как строка запроса должна иметь уникальные ключи, состоит в добавлении скрытого поля в форму, а затем в событии 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>

Это лучше, чем переопределение значений по умолчанию (и ожидаемого поведения) параметров на основе ключа / значения.

1 голос
/ 17 мая 2010

Вам просто нужно проверить себя в цикле, если vars [hash [0]] уже существует и если это так, то вместо выполнения vars [hash [0]] = hash [1]; вы будете делать vars [hash [0]] + = ',' + hash [1];

0 голосов
/ 17 мая 2010

Попробуйте этот плагин

...