Получение множественного выбора с помощью GET - PullRequest
0 голосов
/ 01 февраля 2011

Я реализовал функцию javascript, которая извлекает переменные, отправленные через форму GET.Однако у меня есть несколько раскрывающихся списков выбора, и при использовании GET каждая выбранная опция отправляется как отдельный параметр.Рассмотрим следующий множественный выбор:

               <select multiple="multiple" name="currencies">
                  <option id="option1" value="option1">Option 1</option>
                  <option id="option1" value="option2">Option 2</option>
                  <option id="option3" value="option3">Option 3</option>
                </select>

Когда я выбираю два или все эти элементы, это URL GET:

http://example.com/mypage.html?currencies=option1&currencies=option2

Следовательно, функция javascript получает только первую опциюпоскольку он разделяет строку, когда встречается &, что необходимо при обнаружении другого элемента.

Есть ли способ обойти это?Мне нужно, чтобы URL GET был примерно таким, предпочтительно:

http://example.com/mypage.html?currencies=option1,option2

Это функция JS, использующая JQuery:

<script>
function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 

}
</script>

1 Ответ

3 голосов
/ 01 февраля 2011

Функция должна быть достаточно умной, чтобы обнаруживать дубликаты и обрабатывать их соответствующим образом.

Например:

var QueryString = function () {
  // This function is anonymous, is executed immediately and 
  // the return value is assigned to QueryString!
  var query_string = {};
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
                // If first entry with this name
    if (typeof query_string[pair[0]] === "undefined") {
      query_string[pair[0]] = pair[1];
                // If second entry with this name
    } else if (typeof query_string[pair[0]] === "string") {
      var arr = [ query_string[pair[0]], pair[1] ];
      query_string[pair[0]] = arr;
                // If third or later entry with this name
    } else {
      query_string[pair[0]].push(pair[1]);
    }
  } 
        return query_string;
} ();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...