Помогите пож с JSON, передача id ссылки.
Здравствуйте, есть скрипт который передает параметры выбора опций html imput.:
<script type="text/javascript"> jQuery.noConflict(); jQuery(document).ready(function(){ jQuery('.popupregion input').click(function(){ var loc = 0; loc = jQuery('.popupregion select option:selected').val(); jQuery.ajax({ url: '/pop.php?loc='+loc, dataType : "json", success: function (data, textStatus) { if(data.ok === true){ document.location.href = document.location.href; } } }); return false; }); }); </script> Сама формочка: <div class="popupregion"<?php if((isset($_COOKIE['proc'])&&isset($_COOKIE['lproc']))){ ?> style="display: none;"<?php } ?>> <div class="block"> <p>ТЕКСТ</p> <div class="select"> <option value="1">Черкасская область</option> <option value="2">Черниговская область</option> <option value="3">Черновецкая область</option> <option value="4">Днепропетровская область</option> <option value="5">Донецкая область</option> <option value="6">Ивано-Франковская область</option> <option value="7">Харьковская область</option> <option value="8">Херсонская область</option> <option value="9">Хмельницкая область</option> <option value="10">Кировская область</option> <option value="11">Крым</option> <option value="12">Киев</option> <option value="13">Киевская область</option> <option value="14">Луганская область</option> <option value="15">Львовская область</option> <option value="16">Николаевская область</option> <option value="17">Одесская область</option> <option value="18">Полтавская область</option> <option value="19">Ровненская область</option> <option value="20">Севастополь</option> <option value="21">Сумская область</option> <option value="22">Тернопольская область</option> <option value="23">Винницкая область</option> <option value="24">Волынская область</option> <option value="25">Закарпатская область</option> <option value="26">Запорожская область</option> <option value="27">Житомирская область</option> <option value="0">Я не из Украины</option> </select> <input type="button" value="выбрать"> </div> </div> </div> Писал очень давно один программист, но связь с ним к большому сожалению утеряна, так вот, помощь нужна в том чтобы такие-же действия выполнялись но только с ссылками, т.е. вместо url: '/pop.php?loc='+loc, добавлял id ссылки, и при нажатии на ссылку происходило тоже самое что и при собитии <input type="button" value="выбрать"> Примерно накидал себе ссылки... <a id="1" href="#">Черкасская область</a> <a id="2" href="#"> Черниговская область</a> <a id="3" href="#">Черновецкая область</a> <a id="4" href="#">Днепропетровская область</a> <a id="5" href="#">Донецкая область</a> <a id="6" href="#">Ивано-Франковская область</a> <a id="7" href="#">Харьковская область</a> <a id="8" href="#">Херсонская область</a> <a id="9" href="#">Хмельницкая область</a> <a id="10" href="#">Кировская область</a> <a id="11" href="#">Крым</a> <a id="12" href="#">Киев</a> <a id="13" href="#">Киевская область</a> <a id="14" href="#">Луганская область</a> <a id="15" href="#">Львовская область</a> <a id="16" href="#">Николаевская область</a> <a id="17" href="#">Одесская область</a> <a id="18" href="#">Полтавская область</a> <a id="19" href="#">Ровненская область</a> <a id="20" href="#">Севастополь</a> <a id="21" href="#">Сумская область</a> <a id="22" href="#">Тернопольская область</a> <a id="23" href="#">Винницкая область</a> <a id="24" href="#">Волынская область</a> <a id="25" href="#">Закарпатская область</a> <a id="26" href="#">Запорожская область</a> <a id="27" href="#">Житомирская область</a> <a id="0" href="#">Я не из Украины</a> а вот с js у меня большие проблемы( почитав кучу текста про это все ничему ненаучился и ничего у меня не вышло(, помогите пожалуйста. |
Цитата:
Код на чистом js: // оборачиваем код в функцию, дабы не засерать глобальную область переменными (function(){ // коллекция элементов-регионов var options = document.querySelectorAll('a'); // обработчик события click var onclick = function() { // обработчик вызывается в контексте элемента, на котором он зарегистрирован, то есть this указывает на сам элемент var id = this.getAttribute('id'); // создаем объект для ajax-запроса var request = new XMLHttpRequest(); // настраиваем на GET-запрос request.open('GET', '/pop.php?loc=' + id); // навешиваем обработчик "смены состояний". тут бы лучше подошел обработчик onload, но у него проблемы с кроссбраузерностью request.onreadystatechange = function() { // ожидаем завершения запроса // 4 - это значение константы request.DONE, означающей, что запрос завершен. опять же, в IE8 константы этой нет, так что пишем тупо четверку if (this.readyState != 4) return; // сервак должен ответить 200 OK, иначе считаем за ошибку if (this.status !== 200) return alert('Ошибка при запросе!'); // парсим JSON-ответ. Может бросить исключение при невалидном значении. var data = JSON.parse(this.responseText); // если ок, то перезагружаем страницу if (data.ok) location.reload(); }; request.send(null); }; for (var i = 0; i < options.length; i++) { // вешаем обработчик события click на все элементы options[i].onclick = onclick; } })(); Цитата:
Да, поменяй id на data-id, и в строчке с getAttribute соответственно тоже. |
Цитата:
--- Сейчас попробую и отпишусь!) Спасибо!) |
danik.js, Спасибо!) Все отлично работает(правда я не менял на data-id, это обязательно?), теперь остается только оформить карту как нужно.
Еще маленький вопросик, раньше перевыбор осуществлялся по такому принцыпу <div class="logo4"><a style="color: #C5C5C4;text-decoration: none !important;" href="javascript:reselects();return false;" onclick="reselects();return false;">Выберите ваш регион:</a><br>Украина:<br> <?=@$rlsloc?> </div> Как сейчас снова вызвать это окошко чтобы перевыбрать регион? можно даже кнопкой [изменить], меня интересует просто сайт js код... --- Беда :( теперь все ссылки (по всему сайту) реагируют так-же, нужно чтобы именно в этом блоке, заранее спасибо! P.S. Ссылка на тестовый поддомен на основном домене стоит старая версия без ваших поправок :) |
Цитата:
Ужасть!!! Там вобще капут че творится. Мой совет - найми нормального спеца, пусть приводит все в порядок. |
Цитата:
И в конце обработчика onclick нужно добавить return false, чтобы отменить действие по умолчанию (переход по ссылке #) |
danik.js, заменил ссылки на
<a class="reg" data-id="0" Поставил: // коллекция элементов-регионов var options = document.querySelectorAll('a.reg'); options[i].onclick = return false; перестало выбиратся, что я опять сделал не так?:( |
Цитата:
Цитата:
Я же в комментариях подписал функцию-обработчик. Вот в конце функции (сразу после request.send() ) и нужно написать return false. То есть функция onclick будет возвращать false, что браузер расценит как необходимость отмены действия по умолчанию (перехода по ссылке) |
danik.js, получилось!) Спасибо огромное!)
|
Цитата:
|
Цитата:
а как закончу сразу почищу повторяющиися строчки. И почищу разные версии jqery |
wisma, зависит от того, как это должно будет выглядеть внешне. Короче покажи HTML свой. Тогда смогу подсказать по JS.
|
danik.js,
на поддомене уже привязал, в шапке есть ссылка Выберите ваш регион: он делает все что я хочу, но вот проблема, раньше при заходе на сайт сразу выскакивало окошко и запоминало выбор, а потом можно было изменить когда угодно регион, теперь-же окошко не выскакивает впервый раз, вот тут не знаю как решить даже( |
Цитата:
Теперь просто: вставь вызов этой функции где-нибудь, где нужные элементы уже доступны (перед </body> однозначно все доступно) |
danik.js,
Вынес но не понял что сделать с onclick нужно, попробывал <script type="text/javascript"> // оборачиваем код в функцию, дабы не засерать глобальную область переменными (function(){ // коллекция элементов-регионов var options = document.querySelectorAll('a.reg'); // обработчик события click var onclick = function() { // обработчик вызывается в контексте элемента, на котором он зарегистрирован, то есть this указывает на сам элемент var id = this.getAttribute('data-id'); // создаем объект для ajax-запроса var request = new XMLHttpRequest(); // настраиваем на GET-запрос request.open('GET', '/pop.php?loc=' + id); // навешиваем обработчик "смены состояний". тут бы лучше подошел обработчик onload, но у него проблемы с кроссбраузерностью request.onreadystatechange = function() { // ожидаем завершения запроса // 4 - это значение константы request.DONE, означающей, что запрос завершен. опять же, в IE8 константы этой нет, так что пишем тупо четверку if (this.readyState != 4) return; // сервак должен ответить 200 OK, иначе считаем за ошибку if (this.status !== 200) return alert('Ошибка при запросе!'); // парсим JSON-ответ. Может бросить исключение при невалидном значении. var data = JSON.parse(this.responseText); // если ок, то перезагружаем страницу if (data.ok) location.reload(); }; request.send(null); return false }; for (var i = 0; i < options.length; i++) { // вешаем обработчик события click на все элементы options[i].onclick = onclick; } })(); </script> попереименовывать function() - результата не дало <upd> Пока вернул обратно перенос, не работал скрипт... |
Я вобще-то говорил про этот онклик:
<p style="color: #C5C5C4;text-decoration: none !important;">Вы выбрали: <a href="#" onclick="toggle(hidden_content);document.getElementById('parent_popup').style.display='block';">изменить</a></p> |
Вложений: 1
danik.js, не выходит, может я делаю все не так( голова не варит , но я заметил один код и наверное он отвечает за вывод формы если ничего не выбранно?
<div class="reselect"> <?php if(isset($_COOKIE['proc'])&&isset($_COOKIE['lproc'])){ ?> <?php if(@$_COOKIE['lproc']!=0){ switch(@$_COOKIE['lproc']){ case 1 : $rlsloc="Украина:<br>Черкасская область"; break; case 2 : $rlsloc="Украина:<br>Черниговская область"; break; case 3 : $rlsloc="Украина:<br>Черновецкая область"; break; case 4 : $rlsloc="Украина:<br>Днепропетровская область"; break; case 5 : $rlsloc="Украина:<br>Донецкая область"; break; case 6 : $rlsloc="Украина:<br>Ивано-Франковская область"; break; case 7 : $rlsloc="Украина:<br>Харьковская область"; break; case 8 : $rlsloc="Украина:<br>Херсонская область"; break; case 9 : $rlsloc="Украина:<br>Хмельницкая область"; break; case 10 : $rlsloc="Украина:<br>Кировская область"; break; case 11 : $rlsloc="Украина:<br>Крым"; break; case 12 : $rlsloc="Украина:<br>Киев"; break; case 13 : $rlsloc="Украина:<br>Киевская область"; break; case 14 : $rlsloc="Украина:<br>Луганская область"; break; case 15 : $rlsloc="Украина:<br>Львовская область"; break; case 16 : $rlsloc="Украина:<br>Николаевская область"; break; case 17 : $rlsloc="Украина:<br>Одесская область"; break; case 18 : $rlsloc="Украина:<br>Полтавская область"; break; case 19 : $rlsloc="Украина:<br>Ровненская область"; break; case 20 : $rlsloc="Украина:<br>Севастополь"; break; case 21 : $rlsloc="Украина:<br>Сумская область"; break; case 22 : $rlsloc="Украина:<br>Тернопольская область"; break; case 23 : $rlsloc="Украина:<br>Винницкая область"; break; case 24 : $rlsloc="Украина:<br>Волынская область"; break; case 25 : $rlsloc="Украина:<br>Закарпатская область"; break; case 26 : $rlsloc="Украина:<br>Запорожская область"; break; case 27 : $rlsloc="Украина:<br>Житомирская область"; break; case 101 : $rlsloc="Россия:<br>Пиздатая область"; break; } ?> <?php }else{ ?> <a href="javascript:reselects();return false;" onclick="toggle(hidden_content);return false;">Выберите регион</a> Сам же показ текста выбраного региона происходит: <a style="color: #C5C5C4;text-decoration: none !important;" href="javascript:reselects();return false;" onclick="reselects();return false;">Выберите ваш регион:</a><br>Украина:<br> <?=@$rlsloc?> При попытке заменить <a href="javascript:reselects();return false;" onclick="toggle(hidden_content);return false;">Выберите регион</a> на <a href="javascript:(hidden_content);return false;" onclick="toggle(hidden_content);document.getElementById('parent_popup').style.display='block';">Выберите регион</a> результата не дает :(. Меняб тыкнуть больно и полегче написать что сделать то... P.S. Навсякий приложил вайлик шаблона (еще не почищеный от множества скриптов..но css по чучуть начал переносить в отдельный файлик) |
Цитата:
Я не знаю где у тебя это генерится, но вот что я вижу (http://123321.constanta.ua/): ![]() |
danik.js, верно, это влияет на переизменение региона, а этот код
<?php if(isset($_COOKIE['proc'])&&isset($_COOKIE['lproc'])){ ?> <br> <div class="reselect"> <?php if(isset($_COOKIE['proc'])&&isset($_COOKIE['lproc'])){ ?> <?php if(@$_COOKIE['lproc']!=0){ switch(@$_COOKIE['lproc']){ case 1 : $rlsloc="Черкасская область"; break; case 2 : $rlsloc="Черниговская область"; break; case 3 : $rlsloc="Черновецкая область"; break; case 4 : $rlsloc="Днепропетровская область"; break; case 5 : $rlsloc="Донецкая область"; break; case 6 : $rlsloc="Ивано-Франковская область"; break; case 7 : $rlsloc="Харьковская область"; break; case 8 : $rlsloc="Херсонская область"; break; case 9 : $rlsloc="Хмельницкая область"; break; case 10 : $rlsloc="Кировская область"; break; case 11 : $rlsloc="Крым"; break; case 12 : $rlsloc="Киев"; break; case 13 : $rlsloc="Киевская область"; break; case 14 : $rlsloc="Луганская область"; break; case 15 : $rlsloc="Львовская область"; break; case 16 : $rlsloc="Николаевская область"; break; case 17 : $rlsloc="Одесская область"; break; case 18 : $rlsloc="Полтавская область"; break; case 19 : $rlsloc="Ровненская область"; break; case 20 : $rlsloc="Севастополь"; break; case 21 : $rlsloc="Сумская область"; break; case 22 : $rlsloc="Тернопольская область"; break; case 23 : $rlsloc="Винницкая область"; break; case 24 : $rlsloc="Волынская область"; break; case 25 : $rlsloc="Закарпатская область"; break; case 26 : $rlsloc="Запорожская область"; break; case 27 : $rlsloc="Житомирская область"; break; } ?> <?php }else{ ?> <a href="javascript:reselects();return false;" onclick="reselects();return false;">Выберите регион</a> <?php } ?> <?php } ?>влияет на вывод текста и выбор в случае изначальной пустоты (не выбраного ниодного региона), вот не могу понять как оформить условие <a href="javascript:reselects();return false;" onclick="reselects();return false;">Выберите регион</a>чтобы сразу выводилась формочка которую ты написал. |
нет, вроде там но не там копаю( Как сделать автоматический вывод скрипта если ничего не выбрано изначально?
|
Цитата:
Вобще, как я уже намекал - хороший вебмастер тут найдет массу работы для себя) |
Цитата:
if (!regionSelected) { showRegionPopup(); } Код должен быть в конце <body>, regionSelected переменная должна быть установлена через php код (у тебя ведь в шаблоне заложена нужная логика), showRegionPopup функция должна отображать модальное окно выбора. Как-то так. Более конкретно врядли подскажу, ибо это ковыряние в коде, а это скучно. |
Цитата:
<a style="color: #C5C5C4;text-decoration: none !important;" href="#" onclick="toggle(hidden_content);document.getElementById('parent_popup').style.display='block';" >Выберите ваш регион:</a>открывается этот самый блок и все умно сохраняется, но когда ставишь тоже самое в <?php }else{ ?> <a href="javascript:reselects();return false;" onclick="reselects();return false;">Выберите регион</a>ничего не происходит, я имею ввиду код который показует hidden_content, это пол беды... Когда я убираю в блоке <div id="hidden_content" style="display: none;"> <div class="popupregion" <?php if((isset($_COOKIE['proc'])&&isset($_COOKIE['lproc']))){ ?> <?php } ?>>строку <div id="hidden_content" style="display: none;">форма выводится, но после выбора не скрывается, я в js вообще полный ноль ( |
Часовой пояс GMT +3, время: 07:35. |