|
|
|
|
|
для: *m*
(28.02.2011 в 15:55)
| | Я же писал:
Нет в примере и фиксации выбранного пользователем, что тоже зависит от того, что вы планируете делать. А это может быть как формирование массива с последующей сериализацией для передачи его по url, так и формирование скрытых полей формы. И то и другое сделать не сложно.
То есть, нужно добавить к обработке событий onchange списков действия, по которым выбранные значения спика будут где-то фиксироваться. Если вы отправляете формой, то значит на jQuery же и добавляйте скрытые поля в эту форму, соответственно именуя их, и давая значения выбранные пользователем в списках. Еще лучше, по выбору в списках, создавать промежуточный массив, который будет обновляться по выбору, так как пользователь может изменить свое решение, что-то ранее выбранное изменить, либо вообще отказаться от какого либо выбора. В этом случае этот промежуточный массив можно легко отредактировать, и только перед отправкой формы добавить скрытые поля формы с его значениями. Для того чтобы пользователь мог отменить что либо из ранее выбранного, перед помещением значений массива в форму необходимо вывести результат выбора, в котором он может произвести необходимое. | |
|
|
|
|
|
|
|
для: sim5
(28.02.2011 в 13:43)
| | Отлично!) Ну я буду собирать в объекты потому что AJAX не знаю совсем, поэтому буду отталкиваться от вашего примера. Единственное, что у меня почему-то не попадают данные из селектов в массив $_POST. То есть я поместил ваш пример в форму, по кнопке отправить в $_POST попадает только сама кнопка. | |
|
|
|
|
|
|
|
для: *m*
(28.02.2011 в 12:57)
| | Пропадает потому, что так в примере написано, просто в примере нет обработки сохранения выбора, но после выбора список надо удалять. Правда это справедливо только для этого примера, для второго, со списком с множественным выбром, так же делать нельзя.
Так вы и будете формировать динамически, на сервере, правда не сами списки, а данные для них, как то id маршрутов и их названия (если конечно это у вас есть), выводя их в список (ul), id стран и городов, а также их имена, добавляя их в js-объекты. Только заметьте, что эти id маршрутов в элементах LI не прописаны непосредственно, а после буквы m, так как id элемента на странице не может начинаться с цифры. Извлечь цифры из этих id для передачи на сервер не сложно, с помощью рег выражения.
Вы же отдавая страницу пользователю делате выборку из базы, и она вернет все, что на данный момент в ней есть. Сформировали список маршрутов (ul), а вот данные для стран и городов помещаете в два объекта, по примерам указанным в этом примере. То есть, на сервере, в циклах вы формируете не выпадающие списки (select), а формируете эти объекты.
На клиенте будут сформированы списки отражающие текущее состояние в базе, вот и вся динамика. Если у вас задействован Ajax, то можно вообще не строить эти объекты, а получать с сервера запросом от клиента. | |
|
|
|
|
|
|
|
для: sim5
(28.02.2011 в 01:07)
| | А я и подключал в head библиотеку, у меня появлялась возможность выбрать из первого списка, после чего появлялся второй связный список, но когда я выбирал из второго списка он тут же пропадал.
А вот последний пример, работает, мне он в принципе подходит.
Такой вопрос, а можно будет динамически формировать списки, потому что, администратор может добавить новую страну или новые города для какой-нибудь страны, чтобы не приходилось, вручную править списки, нужно чтобы информация из БД подгружалась. Вот как в приведенном мною примере в самом начале, где в javascript в массив, помещаются имплоидом значения, из массива php. Здесь можно тем же образом поступить? | |
|
|
|
|
|
|
|
для: *m*
(27.02.2011 в 20:13)
| | Чтобы пример заработал нужно подключить библиотеку jQuery, в шапке страницы, я же написал, что пример под нее написан .
Чтобы в стране можно было выбрать несколько городов, для этого не надо кучу списков городов, дотстаточно указать одному списку городов атрибут multiple, а к его имени добавить [], тоесть для пимера выше, элемет select будет записан так:
<select multiple name="city[]">
| ,в котором теперь можно выбрать несколько городов, а на сервере, после отправки формы, будет получен массив city.
PS. Немного времени выкроил, вот пример. Но сначала:
1. Нельзя в списке Город выбрать Город -> Город -> Город, как пишите вы. О таком выборе еще может быть речь в случае выбора административной принадлежности. Нужен список с множественным выбором (выше написано).
2. У вас уже есть два списка, а более не получить их, не из чего у вас, а коли вы хотите "завалить" ими страницу, то просто дублируйте их.
Эот пример без кучи списков и предполагает, что у вас есть маршруты, которые охватывают те или иные страны. Выбрав маршрут, пользователь получает список стран этого маршрута, а выбрав страну в этом списке, получает список городов ее, в котором может выбрать несколько городов. При каждом новом выборе (снизу-вверх) списки удаляются со страницы.
Данные пользователю передаются в виде двух js-объктов: а) rut - описывает связь id маршрутов со странами входящими в них; б) cit - описывает связь id стран с городами входящими в них. По этим id происходит выборка в объектах и строится соответствующий список. То есть, готовые списки не создаются на сервере и не передаются клиенту, это не только расточительно, но и не удобно.
Где их выводить, этого я не знаю, как собственно не знаю чего вам вообще надо. Нет в примере и фиксации выбранного пользователем, что тоже зависит от того, что вы планируете делать. А это может быть как формирование массива с последующей сериализацией для передачи его по url, так и формирование скрытых полей формы. И то и другое сделать не сложно.
Пример под jquery, которая в нем подключается с официального сайта разработчика. Если вам надо просто на javascript, то обращайтесь в соответствующий раздел форума, а мне писать некогда.
<html>
<head>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var rut = {"m1":[[1,"Страна 1"],[2,"Страна 2"],[3,"Страна 3"]],
"m2":[[4,"Страна 4"],[5,"Страна 5"],[6,"Страна 6"]],
"m3":[[7,"Страна 7"],[8,"Страна 8"],[9,"Страна 9"]]};
var cit = {1:[[1,"Город 1"],[2,"Город 2"],[3,"Город 3"]],
2:[[4,"Город 1"],[5,"Город 2"],[6,"Город 3"],[7,"Город 4"]],
3:[[8,"Город 1"],[9,"Город 2"],[10,"Город 3"]],
4:[[11,"Город 1"],[12,"Город 2"],[13,"Город 3"]],
5:[[14,"Город 1"],[15,"Город 2"],[16,"Город 3"]],
6:[[17,"Город 1"],[18,"Город 2"],[19,"Город 3"],[20,"Город 4"]],
7:[[21,"Город 1"],[22,"Город 2"],[23,"Город 3"],[24,"Город 4"]],
8:[[25,"Город 1"],[26,"Город 2"],[27,"Город 3"]],
9:[[28,"Город 1"],[29,"Город 2"],[30,"Город 3"],[31,"Город 4"]]};
$(document).ready(function(){
$('#route > li').click(function(){
$('#country').remove();
$('#city').remove();
var s = '<select id="country"><option value="">Выберите...</option>';
var c = rut[this.id]
for(i=0; i<c.length; i++) s += '<option value='+c[i][0]+'>'+c[i][1]+'</option>';
s += '</select>';
$(document.body).append(s);
});
$('#country').live('change',function(){
$('#city').remove();
if(this.value) {
var s = '<select id="city" multiple name="city[]"><option value="">Выберите...</option>';
var c = cit[this.value]
for(i=0; i<c.length; i++) s += '<option value='+c[i][0]+'>'+c[i][1]+'</option>';
s += '</select>';
$(document.body).append(s);
}
});
});
</script>
</head>
<body>
Маршруты
<ul id="route">
<li id="m1">Маршрут 1</li>
<li id="m2">Маршрут 2</li>
<li id="m3">Маршрут 3</li>
</ul>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: sim5
(27.02.2011 в 14:53)
| | что не сработал у меня Ваш пример(
ладно, сейчас нужно хотя бы к чему то прийти, а как в приведенный мною пример, добавить еще несколько, выпадающих списков с продуктами? в моем случае странами. Например еще 2 дополнительных списка городов по выбранной стране, чтобы получилось:
Страна -> Город -> Город -> Город
|
| |
|
|
|
|
|
|
|
для: *m*
(27.02.2011 в 12:15)
| | У вас есть два списка, и выбирать вы можете только из них. Следовательно, привязывайте (показывайте) на странице в том месте, где на данный момент нужно осуществить выбор. Как и где, я не могу сказать, ибо как вы делаете я не знаю. Например, если маршрут это некая схема его, то эти списки можно показывать рядом с узлом маршрута, по которому щелкнет пользователь. В общем решений может быть много, а что....
Что касается самих списков, то отдавать пользователю их лучше не так, тем более, что городов много. Список стран, если он небольшой, может быть уже готовым html кодом, а города в виде js-объекта. Мне некогда сейас писать много, потому пример на jQury, на чистом JS просто чуть больше писать надо будет.
<script>
//объект городов
var t = {1:[[1,'Aaaaa'],[2,'Bbbbb'],[3,'Ccccc']],2:[[5,'Ddddd'],[6,'Eeeee'],[7,'Fffff']],3:[[1,'Ggggg'],[2,'Hhhhh']]};
//вывод списка городов по выбранной стране
function getCity(n) {
if(n) {
var s = '<select name="city" onchange="$(this).remove()"><option value="">Выберите...</option>';
for(i=0; i<t[n].length; i++) s += '<option value='+t[n][i][0]+'>'+t[n][i][1]+'</option>';
s += '</select>';
$(document.body).append(s);
}
}
</script>
<select name="country" onchange="getCity(this.value)">
<option value="">Выберите...</option>
<option value="1">AAAAAA</option>
<option value="2">BBBBBB</option>
<option value="3">CCCCCC</option>
</select>
|
| |
|
|
|
|
|
|
|
для: sim5
(26.02.2011 в 15:43)
| | ))) все может и правильно Вы говорите, но как мне все же сделать, то что мне нужно? | |
|
|
|
|
|
|
|
для: *m*
(26.02.2011 в 15:22)
| | Так при таком подходе как у вас Страна-Город вам все равно придется "вываливать" большой список, вы же не делите их как "часть" городов одной страны, по крайней мере этого у вас не заметно, да и смысла нет в этом. Так что как ни крути, а вам требуется всего два списка.
Другое дело, если бы эти списки имели родителя - туристический маршрут, ему подчинены, вот тогода можно было бы последовательно все и выбирать. То есть три списка - в первом маршрут, второй страны этого маршрута, а третий города в этом маршруте.
И в этом случае обошлось бы тремя списками, не клонируя их для каждого выбора. Если требуется последовательно выбирать эти значения, занося их куда либо, то такую последовательность задать JS-сценарием и отследить ее не сложно будет. | |
|
|
|
|
|
|
|
для: sim5
(26.02.2011 в 13:34)
| | Смотрите, у меня есть задача, добавлять к туристическому экскурсионному туру несколько городов маршрута, города эти могут быть из разных стран, и чтобы не выводить все города всех стран в одном 5ти этажном списке, решил сделать выпадающими списками. Сначала выбираем страну, и в выпадающих списках, выбираем города, этой страны, затем если этот тур отностится еще и к другой стране, выбираем другую страну в списке ниже и выбираем для нее города. Но в принципе не больше трех стран. | |
|
|
| |
|