powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Последовательные выпадающие списки c цепной связью PHP+MySQL
6 сообщений из 6, страница 1 из 1
Последовательные выпадающие списки c цепной связью PHP+MySQL
    #38547956
Centrovoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу виджет для Wordpress.

Нужно сделать 3 выпадающих списка. (их я уже сделал)

Но сначала нужно выбрать в первом списке марку авто, после чего во втором должны появиться модели данной марки, после выбора которых в 3-м выпадающем списке появятся модификации.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
echo "<form id='myform' method='get' action=''>
<select id='manuf' name='manuf'>
<option value=''>Выбрать...</option>";
                $query = mysql_query("SELECT id,brand FROM tof_manufacturers ORDER BY brand");
                $result = mysql_fetch_array($query);
 
                do
                {
                echo "<option value='".$result['id']."'>".$result['brand']."</option>";
                }
                while($result = mysql_fetch_array($query));
 
echo "</select><br><br>";
 
echo "<select id='model' name='model'>
<option value=''>Выбрать...</option>";
                $query1 = mysql_query("SELECT id,description FROM tof_models WHERE manufacturer_id=504");
                $result1 = mysql_fetch_array($query1);
 
                do
                {
                echo "<option value='".$result1['id']."'>".$result1['description']."</option>";
                }
                while($result1 = mysql_fetch_array($query1));
 
echo "</select><br><br>";
 
echo "<select id='god' name='god'>
<option value=''>Выбрать...</option>";
                $query1 = mysql_query("SELECT capacity,start_date,end_date FROM tof_types WHERE model_id=24 GROUP BY capacity,start_date,end_date");
                $result1 = mysql_fetch_array($query1);
 
                do
                {
                echo "<option value='".$result1['id']."'>".$result1['capacity']." (".$result1['start_date']."-".$result1['end_date'].")</option>";
                }
                while($result1 = mysql_fetch_array($query1));
 
echo "</select>";
 
echo "</form>";



Вместо 504 должна быть какае-то переменная, переданная из 1-го селекта после выбора.
Вместо 24 должна быть какае-то переменная, переданная из 2-го селекта после выбора.

Как эту задачу реализовать?
Сайт: http://autotime.by/

С JS совсем не дружу...
...
Рейтинг: 0 / 0
Последовательные выпадающие списки c цепной связью PHP+MySQL
    #38548066
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А через js и придется, если не хотите перезагрузки страницы.

что то типа
Код: javascript
1.
2.
3.
4.
5.
$(".selectauto select").change(function () {
    
    $.post("ajaxmodel.php", { id_auto : $(this).val() }, function(data){$(".selectmodel").html(data);});
    
  });
...
Рейтинг: 0 / 0
Последовательные выпадающие списки c цепной связью PHP+MySQL
    #38554558
Centrovoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак... 2-е суток и у меня уже есть некоторые знания по JS.
Уже почти всё работает, НО осталась проблема:
1-й селект выбрали -- появился второй с нужной выборкой из БД
2-й селект выбираем... и больше ничего не происходит...
Прозванивал алертом, но функция не вызывается.
Единственное до чего дошел, вроде как нельзя вызвать .change у уже сгенерированного select'а кодом jQuery.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
	  	  <script type="text/javascript">
		$(document).ready(function()
	{

	
	$("#manuf").change(function()
					{
        				var id_manuf = $(this).val();

        				
        if(!id_manuf){
                $('div[name="selectDataModel"]').html('');
                $('div[name="selectDataGod"]').html('');
				
        }else{
		
                $.ajax({
                        type: "POST",
                        url: "/action/ajax.base.php",
                        data: { action: 'showRegionForInsert', id_manuf: id_manuf },
                        cache: false,
                        success: function(responce){ $('div[name="selectDataModel"]').html(responce); }
                });
        };
id_manuf.trigger('change');
});

ЭТА ФУНКЦИЯ НЕ ВЫЗЫВАЕТСЯ:
$("#model").change(function(){
alert ("привет2");
var id_model = $(this).val();
	
        $.ajax({
                type: "POST",
                url: "/action/ajax.base.php",
                data: { action: 'showCityForInsert', id_model: id_model },
                cache: false,
                success: function(responce){ $('div[name="selectDataGod"]').html(responce); }
        });
   });
});
	</script>



/action/ajax.base.php:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
<?php

ini_set(default_charset,"UTF-8");

switch ($_POST['action']){
                

                
        case "showCityForInsert":
                echo '<br>Модификация<br><select size="1" name="god">
				<option value="">Выберите модификацию...</option>';
				
				$query = mysql_query('SELECT capacity,start_date,end_date FROM tof_types WHERE model_id='.$_POST['id_model'].' GROUP BY capacity,start_date,end_date');
                $result = mysql_fetch_array($query);

                do
                {
                echo "<option value='".$result['id']."'>".$result['capacity']." (".$result['start_date']."-".$result['end_date'].")</option>";
                }
                while($result = mysql_fetch_array($query));
				
                echo '</select>';
                break;

        case "showRegionForInsert":
		        echo '<br>Модель<br><select id="model" name="model"><option value="">Выбрать...</option>';

				$query = mysql_query('SELECT id,description FROM tof_models WHERE manufacturer_id='.$_POST['id_manuf']);
				$result = mysql_fetch_array($query);
				
                do
                {
				
                echo '<option value="'.$result['id'].'">'.$result['description'].'</option>';
                }
                while($result = mysql_fetch_array($query));
				echo '</select>';
                break;				
};

?>



Что в коде JS изменить, чтобы срабатывала функция
Код: javascript
1.
$("#model").change(function()

, учитывая что select с id="model" был сгенерирован jQuery.
Просмотреть что выдаёт сайт можно тут: http://autotime.by
...
Рейтинг: 0 / 0
Последовательные выпадающие списки c цепной связью PHP+MySQL
    #38554582
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Centrovoy,

вместо $('#model').change(function(){...}) надо юзать $('#new_widget-2').on('change', '#model', function(){...}) или $('#model').live('change', function(){...})

В случае on, мы навешиваем обработчик на элемент под нужным селектом, а в случае live - на body (разумеется первое предпочтительнее).

Всё дело в том, что навешиваются обработчики только на уже существующие элементы... А новосозданный элемент разумеется остаётся без обработчика... Но если обработчик навешивается на элемент-родитель, который уже существует, то событие change появившегося элемента вызовет обработчики всех элементов, в которые вложен этот.
...
Рейтинг: 0 / 0
Последовательные выпадающие списки c цепной связью PHP+MySQL
    #38554592
Centrovoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр,

Спасибо за разъяснения!
Очень помогли!
Теперь всё работает)
...
Рейтинг: 0 / 0
Последовательные выпадающие списки c цепной связью PHP+MySQL
    #38554822
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Centrovoy,

авторЧто в коде JS изменить, чтобы срабатывала функция

Это не JS.

Иерархическая загрузка делается как два пальца без всяких ЖС.

<select name="first" onchange="this.form.submit()">тут опции</select>

Первый делает это для первого и

<select name="second" onchange="this.form.submit()">тут опции</select>

Второй для первого, второго и

<select name="third" onchange="this.form.submit()">тут опции</select>

Третий для первого, второго и

<select name="fourth" onchange="this.form.submit()">тут опции</select>

Ну и так далее.

АЯКС ничего тут не меняет кроме того, что вместо this.form.submit() будет какая-нить check_it_now(this) и "эхать" придется ява-скриптом, вместо пхп-скрипта.

И конечно еще selected_Index придется забивать на все списки. Или в php генерить selected="selected" для выбранной опции.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Последовательные выпадающие списки c цепной связью PHP+MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]