Множественный выбор
Здравствуйте.
Подскажите пожалуйста, как с помощью формы множественного выбора (или checkbox) в html (или html+javascript) получить запрос вида: example.ru/?cat=1&tag=tag1+tag2+tag3+tagN Т.е. мне нужно обязательно, чтобы тэги разделялись знаком "+". |
<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> |
Dilettante_Pro,
Нельзя так, символом + кодируется пробел при передаче данных, а значит сервер получит tag1 tag2 tag3 tagN. |
Dilettante_Pro,
tag= где? |
laimas,
ТС просит Цитата:
|
рони,
Сорри, пропустил:( Исправил:write: |
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> |
Цитата:
|
Спасибо большое, я уж думала, что это невозможно.
|
Цитата:
|
К сожалению, первый вариант в адресной строке выдает:
?tag1=Тег1&tag2=Тег2 а второй Просит подтверить действие "cat=1&tag=Тег2+Тег3" и ничего не происходит потом. |
Цитата:
|
Да дело то не в запросе, а в проверке данных, то есть я могу отправить и такое cat=1&tag=труля-ля+опа-на, такое будет корректно?
|
Цитата:
Первый вариант cat=1&tag=Тег1+Тег2 Что-то не так скопировали из примера. Я проверял комплексную работу на макете HTML <!DOCTYPE html> <html> <head> <title>Test Tags</title> </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&tag="; var boxes = document.querySelectorAll('input[type="checkbox"]:checked'); for (var i = 0; i < boxes.length; i++) { data += (i == 0 ? "" : "+") + boxes[i].value; } var req = new XMLHttpRequest(); req.open("GET", "test.php/?" + data, true); req.addEventListener("load", function () { alert("Done: " + req.responseText); }); req.send(null); } </script> </body> </html> test.php <?php $tag="NoTag"; if(isset($_GET['tag'])) { $tag=$_GET['tag']; } echo $tag ; ?> И все прекрасно отрабатывает. По второму варианту: Кто просит подтвердить действие? Что делает обработчик запроса на сервере? |
Цитата:
Вот ошибка, её показывает браузер. ![]() Дальше я подтверждаю действие и ничего. Вообще ничего. Тестирую не на сервере, а на своем компьютере в браузере. Но сервер мне тут и не нужен, т.к. javascript исполняется в брауере у клиента, и уже дальше отправляет нужный запрос. Вот, к примеру я пробовала так сделать: <form action="http://localhost/wp/" method="get"> <div><select name='cat' id='category' class='postform' > <option value='0'>Выберите категорию</option> <option value="1">Категория 1</option> <option value="2">Категория 2</option> </select> <select name="tag"> <option value=''>Выберите тэг</option> <option value="tag1">Тэг1</option> <option value="tag2">Тэг2</option> <option value="tag3">тэг3</option> </select> <input type="submit" value="Submit"> </div></form> И такой вариант работает прямо в браузере, но WP ищет только по одной категории и одному тэгу. А вот, чтобы по одной категории и нескольким тегам, нужно разделять их плюсами. И вот сделать так, чтобы были "+" не получается. Если добавить в мой код еще раз: <select name="tag"> <option value=''>Выберите тэг</option> <option value="tag1">Тэг1</option> <option value="tag2">Тэг2</option> <option value="tag3">тэг3</option> </select> То форма выдаст в адресную строку: http://localhost/wp/?cat=1&tag=1&tag=2 Такой вариант тоже работает в WP, но ищет как попало. С плюсами же, ищет как надо. |
Цитата:
|
Допускает ввод того, что я написала в первом сообщении. Не о нем речь. Всё, что нужно, это сформировать строчку с запросом в браузере.
|
Я пробовала вот этот вариант. Не работает, а переделать я не знаю как, т.к. не знаю языка.
Находила вот такой вариант, но куда его засунуть никто нигде не пишет. |
Цитата:
|
Я не понимаю, что значит склеивать. И куда вставлять код я так и не поняла. В шаблон, в плагин, в код WP?
|
Цитата:
Код по второй ссылке, это не клиентский код, а серверный, прием данных, и в нем описана обработка массива (!) меток (значений флажков), а не склеенных в строку нескольких значений. Для того чтобы действительно знать как поступить правильно, нужно знать организацию хранения тегов на сервере и их связей. Сомнительно, чтобы хранение тегов было в навал и запрос бы пытался в них найти произвольный набор, такое возможно только в полнотекстовом поиске по заданной логике. |
Цитата:
Если форма работает без скрипта, то она отправляет значение всех полей: имя=значение У вас это первый вариант. Если же форма работает со скриптом- как в примере рони или моем- то там отменяются действия по умолчанию и посылка формируется программным образом. Но в наших примерах не производится отправка на сервер, а выдается сообщение со сформированной строкой отправки, которое вы сочли сообщением об ошибке. С отправкой на сервер-мой последний пример |
Скопировала ваш последний пример. Загрузила за сервер (localhost), в одну папку поместила index.html и test.php. Не работает. Просит подтвердить действие и ничего дальше не происходит.
Изображение с ошибкой. |
Sakhet,
Это не ошибка, это сообщение, вернувшееся на клиент с сервера - программа test.php правильно приняла tag и вернула его в ответ. Вы что, совсем не понимаете программы? |
Не понимаю. Понимала бы, не приходила на форум за помощью. :cray:
И мне это не нужно. В смысле программа test.php это не то, что нужно. Нужно, чтобы скрипт молча передавал в адресную строку example.ru/?cat=1&tag=tag1+tag2+tag3+tagN без подтверждений каких-либо. |
Все, я сдаюсь:cray:
<!DOCTYPE html> <html> <head> <title>Test Tags</title> </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&tag="; var boxes = document.querySelectorAll('input[type="checkbox"]:checked'); for (var i = 0; i < boxes.length; i++) { data += (i == 0 ? "" : "+") + boxes[i].value; } window.location = "example.ru/?" + data; } </script> </body> </html> |
Идеально. Это как раз именно то, что мне так нужно.
Спасибо вам большое. :) |
Здравствуйте.
Прошу меня простить за наглость, но как в скрипт добавить выпадающий список, чтобы поиск еще и по категориям велся? example.ru/?cat=1&tag=tag1+tag2+tag3+tagN cat=N - это id категории. Вот, как я писала ранее в моей попытке реализовать: <form action="http://localhost/wp/" method="get"> <div><select name='cat' id='category' class='postform' > <option value='0'>Выберите категорию</option> <option value="1">Категория 1</option> <option value="2">Категория 2</option> </select> <select name="tag"> <option value=''>Выберите тэг</option> <option value="tag1">Тэг1</option> <option value="tag2">Тэг2</option> <option value="tag3">тэг3</option> </select> <input type="submit" value="Submit"> </div></form> |
Часовой пояс GMT +3, время: 20:52. |