Вход

Просмотр полной версии : Как сохранить выбор в select списке, сгенерированным JS?


Сергей Новиков
08.07.2014, 02:10
Есть скрипт, который имеет список городов в файле, разделенных по регионам. Этот список представлят из себя многомерный массив на 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")?

Как-то можно добавить "selected" для города?

P.S. Я совсем ничего не понимаю в JS, пожалуйста, помогите готовым кодом.

WorM32
08.07.2014, 09:41
В текущем варианте после нажатия на кнопку страница перезагружается?

Сергей Новиков
08.07.2014, 10:16
Да, происходит перезагрузка. И после нее поле для выбора города становится неактивным, соответственно для того, чтобы снова выбрать город сначала нужно изменить регион. Более того, если не изменяя город, изменить другие данные в форме, то ID города не передается.

WorM32
08.07.2014, 10:39
Тогда на стороне php нужно:
1. Предвыбрать в селект нужного региона
2. Получить все города для этого региона
3. Сгенерировать список городов для этого региона в селект city
4. Предвыбрать нужный город в селекте

jsnew
10.12.2014, 23:05
Специально зарегистрировался, что бы спросить у вас.

Как в этом коде, можно посдставить город в запрос, что бы при заходе на страницу, выпадал селект, уже с регионами того города, который мы подставили.

Как это можно реализовать ?

Спасибо большое. :)