ProDomainer.ru - Клуб Домейнеров  
     

Войти через OpenID
Left Nav Справка ПортфолиоАукцион (39) Календарь Поиск Сообщения за день Все разделы прочитаны Right Nav

Left Container Right Container
 

Вернуться   ProDomainer.ru - Клуб Домейнеров > Открытый раздел > Программирование и верстка > Скрипты

Ответ
 
Опции темы Опции просмотра
Старый 08.07.2014, 01:52   #1
Член Клуба ProDomainer.ru
 

10 Как сохранить выбор в 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")?

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 08.07.2014, 18:02   #2
Член Клуба ProDomainer.ru
 

Антон, покажи код в сборе. Мне кажется что проблема не в том что ты описал, а в другом твоем коде. Используй http://jsfiddle.net/ или что-то вроде.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 09.07.2014, 17:44   #3
Член Клуба ProDomainer.ru
 

пусть все работает также, только после сабмита в js сохрани куданить выбранный город (например в куку) и после автоматического выбирания региона, пусть выберется тот город который в куке.

Решение говно конечно, но работать будет )

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 02.08.2014, 18:26   #4
Член Клуба ProDomainer.ru
 

Цитата:
echo json_encode($city[$_GET['region']]); // возвращаем данные в JSON формате;
Всегда, млять, любил такие комментарии. Ни хрена по сути, абы оставить коммент, чтобы никто не сказал, что код недокументированный.
echo "Hello"; //Пишем в стандартый output текст в кавычках.


Шуранов вне форума   Ответить с цитированием
Старый 02.08.2014, 21:41   #5
Член Клуба ProDomainer.ru
 

кто-то плохо помнит что такое json_encode.
А так не самая лапша. сити.пхп создает массив сити из которого невалидированной гет-перименной достаем инфу и выводим ее в жсоне. Логично всё но говнокод и вырванный из контекста
т.е. я хочу сказать что коммент то понятно зачем оставили но без остального разобраться сложно.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 03.08.2014, 09:18   #6
Член Клуба ProDomainer.ru
 

Макс, тебе не кажется, что человек, который даже ни разу не видел языка, из названия "json_encode" сразу догадается, что это сборка в формат JSON?


Шуранов вне форума   Ответить с цитированием
Старый 03.08.2014, 18:25   #7
Член Клуба ProDomainer.ru
 

После того как Обама ввел цензуру в России - мне уже ничего не кажется.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 04.08.2014, 17:56   #8
Член Клуба ProDomainer.ru
 

отакот

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 05.08.2014, 18:09   #9
Член Клуба ProDomainer.ru
 

Ну и старую же вы тему подняли, уже все давно исправлено:

Код:
<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>

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 07.08.2014, 11:39   #10
Член Клуба ProDomainer.ru
 

UFO, троллить знатно научился? У меня чуть пукан не взорвался от таких комментариев.

Добавлено через 38 минут
Дошло, это первый в мире акын-программист!


Шуранов вне форума   Ответить с цитированием
Старый 07.08.2014, 13:23   #11
Член Клуба ProDomainer.ru
 

а мне теперь наконец-то все понятно.
5 за проделанную работу!

...
demon вне форума   Ответить с цитированием
Старый 07.08.2014, 16:24   #12
Член Клуба ProDomainer.ru
 

да, код без подсветки синтаксиса – адик

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 08.08.2014, 20:31   #13
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от Шуранов Посмотреть сообщение
У меня чуть пукан не взорвался от таких комментариев.
На всякий случай, вдруг потом код дадут на рефакторинг шимпанзе.

Цитата:
Сообщение от Александр Посмотреть сообщение
да, код без подсветки синтаксиса – адик
Норм, стараюсь заодно не использовать слишком часто переносы табуляцией. Знаю,
Вячеслав этого не любит, но я-то кодю для шимпанзе.

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 08.08.2014, 22:03   #14
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от UFO Посмотреть сообщение
Вячеслав этого не любит, но я-то кодю для шимпанзе.
а я сначала подумал, что это ты так Славу мартышкой обозвал

...
demon вне форума   Ответить с цитированием
Старый 10.08.2014, 14:13   #15
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от demon Посмотреть сообщение
а я сначала подумал, что это ты так Славу мартышкой обозвал
Он же вроде украинец, а Шампанзе - кажется, грузинская фамилия?..

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 10.08.2014, 16:52   #16
Член Клуба ProDomainer.ru
 

Шампан-дзе. Это грузинская фамилия.


Шуранов вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
Быстрый переход


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