|
 |
|
|
|
 |
|
 |
|
08.07.2014, 01:52
|
#1
|
Член Клуба ProDomainer.ru
Регистрация: 03.03.2009
Сообщений: 1,894
|
Как сохранить выбор в select списке, сгенерированным JS?
Есть скрипт, который имеет список городов в файле, разделенных по регионам. Этот список представлят из себя многомерный массив на PHP. Например:
Код:
$city = array (
'Регион' => array (
1 => 'Город1',
2 => 'Город2',
),
);
У скрипта есть два select'а - для городов и регионов:
Код:
<select name="region" onchange="loadCity(this)">
<option></option>
<?php
// заполняем список регионов
foreach ($city as $region => $cityList)
{
// вывод списка регионов
echo '<option value="' . $region . '" ';
// если вдруг выведенный регион совпадает с выбранным ранее в запросе, то отмечаем его
if ($region == $_POST['region']) echo "selected";
// закрывающий HTML блок простого вывода списка регионов
echo '>' . $region . '</option>' . "\n";
}
?>
</select>
<select name="city" disabled="disabled">
<option>Выберите город</option>
</select>
При выборе области, сработает функция loadCity, которая подгрузит список городов, вот она:
Код:
function loadCity(select)
{
var citySelect = $('select[name="city"]');
// посылаем AJAX запрос, который вернёт список городов для выбранной области
$.getJSON('index.php', {action:'getCity', region:select.value}, function(cityList){
citySelect.html(''); // очищаем список городов
// заполняем список городов новыми пришедшими данными
$.each(cityList, function(i){
citySelect.append('<option value="' + i + '">' + this + '</option>');
});
});
}
Ну и PHP скрипт который отдаст в JSON формате список городов конкретной области:
Код:
<?php // файл index.php
require_once('city.php');
if (isset($_GET['action']) && $_GET['action'] == 'getCity')
{
if (isset($city[$_GET['region']]))
{
echo json_encode($city[$_GET['region']]); // возвращаем данные в JSON формате;
}
else
{
echo json_encode(array('Выберите область'));
}
exit;
}
?>
Но проблема в том, что если добавить на страницу кнопку, и по кнопке выводить информацию о выбранном городе на той же странице (без перехода куда-то еще), то выбранный город сразу теряется и поле становится серым, даже неактивным (висит надпись "Выберите город"), и чтобы снова выбрать город, нужно поменять регион, потом поменять еще раз на правильный и выбрать город.
Вопрос: как сохранить в списке не только регион, но и выбранный город (т.е. проблема в select name="city")?
|
«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
|
|
|
08.07.2014, 18:02
|
#2
|
Член Клуба ProDomainer.ru
Регистрация: 11.03.2009
Сообщений: 8,694
|
Антон, покажи код в сборе. Мне кажется что проблема не в том что ты описал, а в другом твоем коде. Используй http://jsfiddle.net/ или что-то вроде.
|
В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
|
|
|
09.07.2014, 17:44
|
#3
|
Член Клуба ProDomainer.ru
Регистрация: 04.03.2009
Адрес: Москва
Сообщений: 3,298
|
пусть все работает также, только после сабмита в js сохрани куданить выбранный город (например в куку) и после автоматического выбирания региона, пусть выберется тот город который в куке.
Решение говно конечно, но работать будет )
|
http://rudevich.com
|
|
|
02.08.2014, 18:26
|
#4
|
Член Клуба ProDomainer.ru
Регистрация: 02.03.2009
Адрес: Черногория, Бар
Сообщений: 5,286
|
Цитата:
echo json_encode($city[$_GET['region']]); // возвращаем данные в JSON формате;
|
Всегда, млять, любил такие комментарии. Ни хрена по сути, абы оставить коммент, чтобы никто не сказал, что код недокументированный.
echo "Hello"; //Пишем в стандартый output текст в кавычках.
|
|
|
|
02.08.2014, 21:41
|
#5
|
Член Клуба ProDomainer.ru
Регистрация: 11.03.2009
Сообщений: 8,694
|
кто-то плохо помнит что такое json_encode.
А так не самая лапша. сити.пхп создает массив сити из которого невалидированной гет-перименной достаем инфу и выводим ее в жсоне. Логично всё но говнокод и вырванный из контекста 
т.е. я хочу сказать что коммент то понятно зачем оставили но без остального разобраться сложно.
|
В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
|
|
|
03.08.2014, 09:18
|
#6
|
Член Клуба ProDomainer.ru
Регистрация: 02.03.2009
Адрес: Черногория, Бар
Сообщений: 5,286
|
Макс, тебе не кажется, что человек, который даже ни разу не видел языка, из названия "json_encode" сразу догадается, что это сборка в формат JSON?
|
|
|
|
03.08.2014, 18:25
|
#7
|
Член Клуба ProDomainer.ru
Регистрация: 11.03.2009
Сообщений: 8,694
|
После того как Обама ввел цензуру в России - мне уже ничего не кажется.
|
В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
|
|
|
04.08.2014, 17:56
|
#8
|
Член Клуба ProDomainer.ru
Регистрация: 04.03.2009
Адрес: Москва
Сообщений: 3,298
|
отакот
|
http://rudevich.com
|
|
|
05.08.2014, 18:09
|
#9
|
Член Клуба ProDomainer.ru
Регистрация: 03.03.2009
Сообщений: 1,894
|
Ну и старую же вы тему подняли, уже все давно исправлено:
Код:
<select name="city"
<?php // продолжение вывода select'а в случае, если город еще не выбран
// город не был выбран? т.е. возможно мы еще и регион не выбрали
if (!isset($_POST['city'])) {
// выключаем опцию выбора города, идите сначала регион выберите
echo "disabled=\"disabled\">";
// и выведем заглушку на тему того, что город то не выбран
echo "<option>Выберите город</option>";
// иначе - если город выбран, то НЕ блокируем выбор города
} else {
// т.е. закрываем тег select'а
echo ">";
// добавим опцию - это просто слово-заглушка, если региона нет
if ($_POST['region']=="null") { echo "<option value=\"no_city\">Выберите город</option>"; }
// узнаем из формы регион
$region = $_POST['region'];
// создадим переменную для массива
$tempmass = array();
// часть многомерного массива (массив городов из выбранного пользователем региона) поместим во временный массив
$tempmass = $city["$region"];
// сколько городов во временном массиве - выбранном регионе?
$allcity = count($tempmass);
// узнаем ID первого города из региона, для этого переберем все города
foreach($tempmass as $key => $value) {
// где key - индексы массива, а value - сами значения
$FirstIndex = $tempmass[$key]; // тоже значение (первое) массива
break;
// прервем выполнение на первом же элементе, т.к. нам нужен первый
} // скобка от переборки временного массива в цикле
// сколько всего в абсолютных числах городов в массиве по ID
$itogo = $key + $allcity;
// сделаем переборку от первого элемента до последнего, который является суммой кол-ва элементов и ID первого
for ($key; $key < $itogo; $key++)
{
// выводим нужную пачку городов выбранного региона:
echo "<option value=\"".$key."\" ";
// если город совпал с тем, что выбрал пользователь, то отметим его (город)
if ($cityid == $key) echo "selected";
// вывод самого города из многомерного массива
echo ">".$city[$region][$key]."</option>";
} // скобка от цикла for вывода значений
} // скобка от случая, когда пользователем уже выбран город
// далее в любом случае закрываем второй селектор
?>
</select>
|
«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
|
|
|
07.08.2014, 11:39
|
#10
|
Член Клуба ProDomainer.ru
Регистрация: 02.03.2009
Адрес: Черногория, Бар
Сообщений: 5,286
|
UFO, троллить знатно научился? У меня чуть пукан не взорвался от таких комментариев.
Добавлено через 38 минут
Дошло, это первый в мире акын-программист!
|
|
|
|
07.08.2014, 13:23
|
#11
|
Член Клуба ProDomainer.ru
Регистрация: 04.03.2009
Сообщений: 1,361
|
а мне теперь наконец-то все понятно.
5 за проделанную работу!
|
...
|
|
|
07.08.2014, 16:24
|
#12
|
Член Клуба ProDomainer.ru
Регистрация: 04.03.2009
Адрес: Москва
Сообщений: 3,298
|
да, код без подсветки синтаксиса – адик
|
http://rudevich.com
|
|
|
08.08.2014, 20:31
|
#13
|
Член Клуба ProDomainer.ru
Регистрация: 03.03.2009
Сообщений: 1,894
|
Цитата:
Сообщение от Шуранов
У меня чуть пукан не взорвался от таких комментариев.
|
На всякий случай, вдруг потом код дадут на рефакторинг шимпанзе.
Цитата:
Сообщение от Александр
да, код без подсветки синтаксиса – адик
|
Норм, стараюсь заодно не использовать слишком часто переносы табуляцией. Знаю,
Вячеслав этого не любит, но я-то кодю для шимпанзе.
|
«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
|
|
|
08.08.2014, 22:03
|
#14
|
Член Клуба ProDomainer.ru
Регистрация: 04.03.2009
Сообщений: 1,361
|
Цитата:
Сообщение от UFO
Вячеслав этого не любит, но я-то кодю для шимпанзе.
|
а я сначала подумал, что это ты так Славу мартышкой обозвал
|
...
|
|
|
10.08.2014, 14:13
|
#15
|
Член Клуба ProDomainer.ru
Регистрация: 03.03.2009
Сообщений: 1,894
|
Цитата:
Сообщение от demon
а я сначала подумал, что это ты так Славу мартышкой обозвал
|
Он же вроде украинец, а Шампанзе - кажется, грузинская фамилия?..
|
«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
|
|
|
10.08.2014, 16:52
|
#16
|
Член Клуба ProDomainer.ru
Регистрация: 02.03.2009
Адрес: Черногория, Бар
Сообщений: 5,286
|
Шампан-дзе. Это грузинская фамилия.
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
|
|
|
Часовой пояс GMT +4, время: 05:18.
| |
| |