Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработчик для выпадающих списков. Подключить (https://javascript.ru/forum/events/41869-obrabotchik-dlya-vypadayushhikh-spiskov-podklyuchit.html)

Влади_мир 02.10.2013 14:23

Обработчик для выпадающих списков. Подключить
 
Добрый день. Еще про выборку тегов: вот есть выпадающие списки в которых прописаны теги и нужно чтоб поиск суммировался по этим трем выбранным тегам.
Есть такой код, но чуть-чуть не работает:
<form action="" method="get" name="vyborka">

    Ширина профиля
  <select size="1" id="shirina">
    <option value="0" selected>&nbsp;</option>
    <option value="145">145</option>
    <option value="155">155</option>
    <option value="165">165</option>
  </select>

   Высота профиля
  <select size="1" id="vysota">
    <option value="0" selected>&nbsp;</option>
    <option value="40">40</option>
    <option value="45">45</option>
  </select>
 
    Диаметр
  <select size="1" id="diametr">
    <option value="0"  selected>&nbsp;</option>
    <option value="R12">12</option>
    <option value="R13">13</option>
    <option value="R14">14</option>
  </select>

    <button id="knopka1">Подобрать</button>

</form>

<script>

knopka1.onclick = function () {
var flag=0;

var shirina='';
if (document.getElementById('shirina').value!='0') {
shirina = document.getElementById('shirina').value;
flag=1;
} else {shirina='';}

var vysota='';
if (document.getElementById('vysota').value!='0') {
if (flag!=0) { vysota='+'; }
vysota += document.getElementById('vysota').value;
flag=1;
} else {vysota='';}
 
var diametr='';
if (document.getElementById('diametr').value!='0') {
if (flag!=0) { diametr='+';}
diametr += document.getElementById('diametr').value;
} else {diametr='';}

top.location.href='#/?tag='+shirina+vysota+diametr;

}
</script>


Этот код выдает в командной строке: сайт.ru/stranitsa?#/?tag=тэг1+тэг2+тэг3
то есть, не хочет писать как надо: сайт.ru/?tag=тэг1+тэг2+тэг3


Пробовал добавлять "window" перед top, знак + вместо "=", index.php и еще кучу вариантов...
пробовал в action= писать "vyborka.php" и в него переносить код джавы - вообще пустую страницу выдает.

Подскажите, плиз, как добиться такой выдачи: сайт.ru/?tag=тэг1+тэг2+тэг3 так, чтоб это получалось с любого уровня вложенности, ну и с главной тоже. С главной сейчас выдает так:
сайт.ru/?#/?tag=215+55+R14

рони 02.10.2013 14:41

Влади_мир,
попробуйте помедитировать над стройкой 54 прочитав http://javascript.ru/window-location

рони 02.10.2013 18:05

Влади_мир, строка 54
window.location = "http://сайт.ru?tag="+shirina+vysota+diametr

danik.js 02.10.2013 19:02

Ну и бредятина. Руки бы поотрубал :) Кнопка по дефолту отправит форму на сервер и браузер автоматически сформирует GET-запрос. Нужно только прописать атрибуты name для контролов.

Влади_мир 02.10.2013 19:18

Цитата:

Сообщение от рони (Сообщение 274699)
Влади_мир,
попробуйте помедитировать над стройкой 54 прочитав http://javascript.ru/window-location

Цитата:

Сообщение от рони (Сообщение 274735)
Влади_мир, строка 54
window.location = "http://сайт.ru?tag="+shirina+vysota+diametr

РОНИ, спасибо, но что то не работает(.
Я честно убил час медитируя над справочником. по моей логике пытался использовать hostname вместо href. Сдаваться пока не собирался... но обновил форум и увидел Вашу вторую подсказку. Этот вариант 54-й строки не работает. Не помог слеш перед ?, замена двойных кавычек на одинарные, ну и конечно точка с запятой в конце. Продолжаю медитацию

Влади_мир 02.10.2013 19:23

Цитата:

Сообщение от danik.js (Сообщение 274739)
Ну и бредятина. Руки бы поотрубал :) Кнопка по дефолту отправит форму на сервер и браузер автоматически сформирует GET-запрос. Нужно только прописать атрибуты name для контролов.

danik.js, это вы про action="файл обработчик" говорите? там id прописаны вместо name.
Если в отдельном файле писать скрипт это проще? Я просто писал так: (не помогло)
<script>
function () {
var flag=0;

var shirina='';
if (document.getElementById('shirina').value!='0') {
 shirina = document.getElementById('shirina').value;
 flag=1;
} else {shirina='';}

var vysota='';
if (document.getElementById('vysota').value!='0') {
 if (flag!=0) { vysota='+'; }
 vysota += document.getElementById('vysota').value;
 flag=1;
} else {vysota='';}

var diametr='';
if (document.getElementById('diametr').value!='0') {
 if (flag!=0) { diametr='+';}
 diametr += document.getElementById('diametr').value;
} else {diametr='';}

window.location = 'http://сайт.ru?tag='+shirina+vysota+diametr; (тут был старый код)

}
</script>

В смысле - если id заменить на name - то заработает чтоли?

danik.js 02.10.2013 19:34

Зачем тут вообще javascript используется? Если назначить name, то сформируется удобный понятный GET-запрос вида:
?shirina=150&vysota=20&diametr=45
Минус 30 строк кода, плюс noscript юзеры, плюс к масштабируемости (добавить новое поле - не вопрос. Переименовать поле - не вопрос. и тд.)

... <select size="1"> - а зачем вы пишете атрибут size="1" ?

Влади_мир 02.10.2013 19:46

Цитата:

Сообщение от danik.js (Сообщение 274744)
Зачем тут вообще javascript используется? Если назначить name, то сформируется удобный понятный GET-запрос вида:
?shirina=150&vysota=20&diametr=45
Минус 30 строк кода, плюс noscript юзеры, плюс к масштабируемости (добавить новое поле - не вопрос. Переименовать поле - не вопрос. и тд.)

... <select size="1"> - а зачем вы пишете атрибут size="1" ?

size="1" - выпадающий список с видимой частью в 1 строку. Мне такой нужен. К сожалению, джаваскрипт - не мой, я сам знаю только немного html и css. Как этот "GET" реализовать не знаю. Готового кода чтоб сделать файл-обработчик не нашел на php... Нашел вот двава-скрипт и сним и маюсь)
Может подскажите как php сделать?

Ну в смысле как сделать запрос POST чтоб он отправил инфу на почту я видел. А вот GET не нашел. То есть не нашел примера на php, чтоб подогнать под себя

danik.js 02.10.2013 19:51

Цитата:

Сообщение от Влади_мир
Может подскажите как php сделать?

А как сейчас выглядит код обработчика?
size=1 писать бесполезно насколько я знаю (хотя значение size по умолчанию равно нулю, но на вид тоже самое)

Влади_мир 02.10.2013 20:05

Цитата:

Сообщение от danik.js (Сообщение 274751)
А как сейчас выглядит код обработчика?

Это долго мне( два дня назад ковырялся, сейчас быстро не найду - не сохранил т.к. ничего путного не было


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