|
|
|
| Вообщем надо сделать динамический <select>, тоесть сначало я в первом селекте выбераю что-то и взавимости от того, что я выбрал отображается другой селект. Вот как на знакомствах http://love.otvali.ru там сначало выбераешь страну, а потом динамически подгружается город. | |
|
|
|
|
|
|
|
|
для: codexomega
(28.01.2006 в 08:29)
| | Да, спасибо. По ссылке я нашел решение:
<html>
<head>
<script language="JavaScript">
dir = new Array()
dir[0] = new Array()
dir[0][0]=new dir_qrec("","")
dir[1] = new Array()
dir[1][0]=new dir_qrec("sub1_1","value1_1")
dir[1][1]=new dir_qrec("sub1_2","value1_2")
dir[2] = new Array()
dir[2][0]=new dir_qrec("sub2_1","value2_1")
dir[2][1]=new dir_qrec("sub2_2","value2_2")
dir[2][2]=new dir_qrec("sub2_3","value2_3")
function dir_qrec(subname,subid){
this.subname=subname
this.subid=subid
return this
}
function show_subs()
{
var k=document.form1.menu1.selectedIndex
var listObj=document.form1.menu2
listObj.length=0
for (var j=0; j<dir[k].length; j++)
{
listObj.options[j]=new Option(dir[k][j].subname)
document.form1.menu2.options[j].value=dir[k][j].subid
}
listObj.options[0].selected=true
}
</script>
</head>
<body>
<form name="form1">
<select name="menu1" onChange="show_subs();">
<option selected>unnamed1</option>
<option>unnamed2</option>
<option>unnamed3</option>
</select>
<br>
<select name="menu2" onChange="">
<option></option>
</select>
</form>
</body>
</html>
|
Только мне надо, чтобы подгружались файлы, а не заранее было определено. Вообщем как на http://love.otvali.ru | |
|
|
|
|
|
|
|
для: JIEXA
(28.01.2006 в 08:51)
| | Плз подскажите | |
|
|
|
|
|
|
|
|
для: cheops
(28.01.2006 в 21:21)
| | Угу спасибо, только вроде бы на http://love.otvali.ru не перезагружается страница.
Хотя меня устраевает данное решение, но все таки если есть решение, чтобы страницы не перезагружалась, то я был бы очень благодарен.
Вот код, который я нашел в теме по вашей ссылке:
<form name="form" method="post" action="abc.php">
<select name="select" onchange='this.form.submit()'>
<option value="ru">Россия</option>
<option value="ua">Украина</option>
</select>
<?php
$query = "";
if($POST['select'] == 'ru') $query = "SELECT * FROM region WHERE country = 'ru'";
if($POST['select'] == 'ua') $query = "SELECT * FROM region WHERE country = 'ua'";
if(!empty($query))
{
$reg = mysql_query($query);
if(!$reg) exit(mysql_error());
// Если имеется хотя бы одно значение
// формируем select
if(mysql_num_rows($reg) > 0)
{
echo "<select name=region>";
while($region = mysql_fetch_array($reg))
{
echo "<option value=$region[id]>$region[name]</option>";
}
echo "</select>";
}
}
?>
</form>
|
| |
|
|
|
|
|
|
|
для: JIEXA
(29.01.2006 в 00:29)
| | Посмотрите код в аттаче | |
|
|
|
|
|
|
|
для: cheops
(29.01.2006 в 15:03)
| | Да нет :)))) Вы немного не поняли меня. Мне надо, чтобы все <option> не были определены заранее. Короче вот у меня есть код:
<select name="char">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
<option value="F">F</option>
<!-- И и т.д. по алфавиту -->
</select>
И вот к примеру я выбераю в селекте букву D, и ява скрипт обращается к другому скрипту (generator.php?char=D) и тот скрипт выдает все записи на букву D, в тоже время ява скрипт генерирует новый <select> со всеми этими записями. Вы посмотрите на http://love.otvali.ru сначало выбераешь страну, затем генерируется список всех городов этой страны. Это все я делаю, чтобы уменьшить размер страницы, так как записей будет больше 5 тысяч на каждую букву... | |
|
|
|
|
|
|
|
для: JIEXA
(29.01.2006 в 18:08)
| | Если хочется генерировать селект, то есть метод добавления option в select -
(цитата)
Add() NN n/a IE 4 DOM n/a
add(element, [index])
Добавляет уже созданный элемент (от метода createElement()) к текущей коллекции. Элемент должен иметь тип OPTION. По умолчанию, если Вы не определите индексное значение как второй параметр, новый элемент добавляется как последний элемент коллекции. Следующая последовательность добавляет в конец массива объекта SELECT новый элемент :
var newElem = document.createElement("OPTION") newElem.text = "Freddy" newElem.value = "Freddy Mercury" document.forms[1].rockers.options.add(newElem)
|
Обратите внимание, что сначала создаётся объект newElem. Затем его свойства наполняются значениями. Затем новый элемент физически добавляется к элементу SELECT.
В Navigator <= 4 процесс добавления элемента OPTION полностью отличен. Чтобы добавить в конец новый элемент, назначите его как результат конструктора Option( ) последнему индексу массива (соответствующему целому числу, возвращенному свойством length). Параметры для функции конструктора (по порядку):
Строка, соответствующая свойству text
Строка, соответствующая свойству value
Булева переменная, соответствующая свойству defaultSelected
Булева переменная, соответствующая свойству selected
Например, версия для Navigator предшествующего примера (для IE):
document.forms[1].rockers.options[length] = new Option("Freddy", "Freddy Mercury", false, false)
Вы можете вставлять новый элемент где-нибудь в другом месте в списке, определяя желательное индексное значение массива options.
Возвращаемое значение
None.
Параметры
element Полностью сформированная ссылка на объект, обычно генерируемая методом createElement().
index Дополнительное целое число, указывающее, куда новый элемент должен быть помещен в массиве.
(/цитата)
Как оно сейчас для Gecko - не знаю, см. в док.
Обнулять селект можно по обнулению его innerHTML; вносить таким способом options не получится.
----------------------
Есть альтернатива, которую легче верстать, проверять и заносить из базы. Если генерировать селект в JS не надо, создаёте ряд заготовок вторых селектов с display:none, а по выбору первого селекта открываете нужный второй. | |
|
|
|
|
|
|
|
для: 12345
(29.01.2006 в 23:35)
| | Я вообще не знаю JS :( Если не трудно, можно мне примерчик? | |
|
|
|
|
|
|
|
для: JIEXA
(30.01.2006 в 01:10)
| | Как раз здесь разбирали свежий пример 2-го метода решения: http://forum.vingrad.ru/index.php?showtopic=81356. Нечто подобное было и на этом форуме, но не помню, был ли пример. | |
|
|
|
|
|
|
|
для: 12345
(30.01.2006 в 13:00)
| | Неее ну не то :( ну блин :( Как же мне объяснить.
Мне надо, чтобы после выбора первого селекта подгружался второй... Сейчас покажу примерный код:
<form method=post>
Выберите букву
<select name=char>
<option value="А">А</option>
<option value="Б">Б</option>
<option value="В">В</option>
<option value="Г">Г</option>
<option value="Д">Д</option>
<option value="Ж">Ж</option>
<option value="З">З</option>
</select>
<!-- тут JS, который работает сразу же как только выбрали в первом селекте букву
Этот JS делает запрос к примеру к файлу artists_list.php?char=тут_выбраная_буква_в_первом_селекте
И скрипт artists_list.php отдает JS скрипту новый селект с артистами. И мы его выводим пользователю. Это все надо без перезагрузки страницы -->
</form>
|
Плз пожалуйста помогите, мне проект надо сдавать, а я запоролся на этом моменте, так как совсем незнаю JS. | |
|
|
|
|
|
|
|
для: JIEXA
(30.01.2006 в 17:39)
| | Понятно, что не то - я как пример привёл. Подгрузка описанная делается в AJAX-приложениях через xmlhttprequest - http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=12197 . Опера 8.01 неполноценно поддерживает этот метод, а, например, в 7.54 данный пример не работает. Поэтому тебе нужно согласовать задачу с поддержкой версий. Есть метод (кроме фреймов), поддерживающий Оперу от 7-й версии.
Вот то, что ты предлагаешь, тянет на 20$, если кто-то согласится бесплатно разобраться с твоей БД, у вас быстро найдётся взаимопонимание, и за полдня сделает. Тут есть желающие подработать - вмиг возьмутся. | |
|
|
|
|
|
|
|
для: 12345
(30.01.2006 в 18:56)
| | Нет можно без них, посмотрите не знакомствах там вообще вроде сам скрипт выборки пару строк занимает. Ладно буду ждать ответа cheops'a. Он думаю сможет помочь ;). Вам тоже спасибо ) | |
|
|
|
|
|
|
|
для: JIEXA
(30.01.2006 в 21:56)
| | посмотрел главную страницу - там скрипт из 4 функций 120 строк занимает, организовано методом подгрузки фрейма
<iframe id="data_frame" src="" width="0" height="0"></iframe>
...
function dg_ForceUpdate(type, lang)
{
this.UplType = type;
var country = anketa.elements[this.country_el].options[anketa.elements[this.country_el].selectedIndex].value;
for (i = anketa.elements[this.town_el].options.length - 1; i >= 1 ; i--)
anketa.elements[this.town_el].options.remove(i);
anketa.elements[this.town_el].disabled = true;
if (type == 1)
{
if (country == 0)
{
for (i = anketa.elements[this.region_el].options.length - 1; i >= 1 ; i--)
anketa.elements[this.region_el].options.remove(i);
anketa.elements[this.region_el].disabled = true;
anketa.elements[this.town_el].disabled = true;
return;
}
for (i = anketa.elements[this.region_el].options.length - 1; i >= 1 ; i--)
anketa.elements[this.region_el].options.remove(i);
// anketa.elements[this.region_el].disabled = true;
data_frame.location.href = "/?a=geo&fs=reg_" + country;
this.CheckDataLoaded();
}
else
{
var region = anketa.elements[this.region_el].options[anketa.elements[this.region_el].selectedIndex].value;
if (region == 0)
anketa.elements[this.town_el].disabled = true;
else
{
data_frame.location.href = "/?a=geo&fs=cities_" + region;
this.CheckDataLoaded();
}
}
}
| далее, эта функция вызывает один или другой тип городов (видимо, "Россия" и "прочие...").
dg_AddOption - занимается созданием строки опций.
dg_CheckDataLoaded - проверка и цикл загрузки опций (option - тегов).
Эту цифру я назвал как самую оптимистичную, с учётом, что человек полдела сделает из интереса. | |
|
|
|
|
|
|
|
для: 12345
(30.01.2006 в 23:06)
| | Спасибо, я сейчас в школу ухожу, но как приду, буду пробывать вырвать остальной JS код. Если у кого-нибудь получится вырвать, то киньте код сюда в тему. (как я нелюблю JS :))) | |
|
|
|
|
|
|
|
для: 12345
(30.01.2006 в 23:06)
| | Блин рыл рыл в итоге не получилось... плз дайте готовый код, если не трудно конечно же... | |
|
|
|
|
|
|
|
для: JIEXA
(31.01.2006 в 18:56)
| | Всё нимагу я умераю, блин да кто придумал такой дуратский синтаксис JS - вообще никак нимагу в нем разобратся толком. Кто нить помогите мне пожалуйста, я же не один тут на форуме :((((((.
Я уже алгоритм работы скрипта выучил...
1. Сначало выбераем значение в первом селекте, второй селект в это время не активен.
2. Когда выбрали значение, идет запрос через iframe к примеру к optiongen.php?id=тут_значения_выбора_первого_селекта
3. optiongen.php выдает все значения для этого id к примеру в ввиде
<script language="javascript">
addoption('название', 'значение');
addoption('название 2', 'значение 2');
addoption('название 3', 'значение 3');
addoption('название 4', 'значение 4');
addoption('название 5', 'значение 5');
addoption('название 6', 'значение 6');
addoption('название 7', 'значение 7');
</script>
И теперь все эти option добавляются во второй селект. Тем кто знает JS это дело 5-10 минут, разве так трудно помочь? | |
|
|
|
|
|
|
|
для: JIEXA
(31.01.2006 в 23:30)
| | HEEEEEEEEEEEEEEEELP | |
|
|
|
|
|
|
|
для: JIEXA
(01.02.2006 в 20:58)
| | Ладно все пофиг, пойду вешатся... Всю жизнь мне не везет, с девушкой расстался, скрипт какой-то ищу уже почти неделю, в школе проблемы. Всё - вешаюсь!!! | |
|
|
|
|
|
|
|
для: JIEXA
(01.02.2006 в 22:21)
| | Это в отдел "разное", там могут верёвку хорошую посоветовать | |
|
|
|
|
|
|
|
для: 12345
(02.02.2006 в 00:54)
| | :D | |
|
|
|
|
|
|
|
для: JIEXA
(02.02.2006 в 14:29)
| | вот сюда загляни
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=75
сам искал долго подобную штуку) | |
|
|
|
|
|
|
|
для: Sulla
(03.02.2006 в 12:22)
| | Спасибо что откликнулись, но тут сразу все данные грузятся в хтмл, а мне надо, чтобы данные подгружались после выбора в первом селекте | |
|
|
|
|
|
|
|
для: JIEXA
(03.02.2006 в 17:17)
| | Нашел!!!!!!!!!!! http://ajax.zervaas.com.au/examples/CountryRegionCityJax/
зы: русские никогда не сдаются!!!! | |
|
|
|
|
|
|
|
для: JIEXA
(07.02.2006 в 23:45)
| | внимательно читаем: http://1ya.ru/?action=viewUseful&id=16
и выкидываем нафиг ajax =) | |
|
|
|