Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Множественный выбор (https://javascript.ru/forum/misc/68638-mnozhestvennyjj-vybor.html)

Sakhet 28.04.2017 14:27

Множественный выбор
 
Здравствуйте.

Подскажите пожалуйста, как с помощью формы множественного выбора (или checkbox) в html (или html+javascript) получить запрос вида:
example.ru/?cat=1&tag=tag1+tag2+tag3+tagN

Т.е. мне нужно обязательно, чтобы тэги разделялись знаком "+".

Dilettante_Pro 28.04.2017 15:06

<form>
   Тег 1<input type="checkbox" name="tag1" value = "Тег1"><br>
   Тег 2<input type="checkbox" name="tag2" value = "Тег2"><br>
   Тег 3<input type="checkbox" name="tag3" value = "Тег3"><br>
   <input type="submit" value="Отправить">
</form>
<script>
document.querySelector('form').onsubmit = function(e){
   e.preventDefault();
   var data = "cat=1&tag=";
   var boxes = document.querySelectorAll('input[type="checkbox"]:checked');
   for(var i = 0; i < boxes.length; i++){
      data += (i==0?"":"+") +  boxes[i].value;
   }
   alert(data); // отправка GET
}
</script>

laimas 28.04.2017 15:24

Dilettante_Pro,
Нельзя так, символом + кодируется пробел при передаче данных, а значит сервер получит tag1 tag2 tag3 tagN.

рони 28.04.2017 15:26

Dilettante_Pro,
tag= где?

Dilettante_Pro 28.04.2017 15:27

laimas,
ТС просит
Цитата:

example.ru/?cat=1&tag=tag1+tag2+tag3+tagN Т.е. мне нужно обязательно, чтобы тэги разделялись знаком "+".
т.е. он, очевидно, и имеет в виду, что сервер получит tag1 tag2 tag3 tagN в одном параметре tag

Dilettante_Pro 28.04.2017 15:32

рони,
Сорри, пропустил:(
Исправил:write:

рони 28.04.2017 15:38

Sakhet,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<form>
  Тег 1<input type="checkbox" name="tag1" value = "Тег1"><br>
  Тег 2<input type="checkbox" name="tag2" value = "Тег2"><br>
  Тег 3<input type="checkbox" name="tag3" value = "Тег3"><br>
  <input type="submit" value="Отправить">
</form>
<script>
document.querySelector('form').onsubmit = function(e){
  e.preventDefault();
  var data = "cat=1";
  var boxes = document.querySelectorAll('input[type="checkbox"]:checked');
  if(boxes.length)
  data += "&tag=" + [].map.call(boxes, function(el) {
  return el.value
  }).join("%2B");
  alert(decodeURIComponent(data));
}
</script>


</body>
</html>

laimas 28.04.2017 15:39

Цитата:

Сообщение от Dilettante_Pro
т.е. он, очевидно, и имеет в виду, что сервер получит tag1 tag2 tag3 tagN в одном параметре tag

Ну не знаю так ли это, а если так, то глупо, ибо сервер получит массив элементов формы, и если их именовать подобающе, то проще просто "склеить" на сервере.

Sakhet 28.04.2017 17:21

Спасибо большое, я уж думала, что это невозможно.

laimas 28.04.2017 17:29

Цитата:

Сообщение от Sakhet
я уж думала, что это невозможно.

А о том, что сервер должен проверять данные извне, а вы таким образом усложняете проверку пришедших данных, вы не думали?


Часовой пояс GMT +3, время: 06:03.