Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Последовательные выпадающие списки c цепной связью PHP+MySQL / 6 сообщений из 6, страница 1 из 1
04.02.2014, 01:36
    #38547956
Centrovoy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательные выпадающие списки c цепной связью PHP+MySQL
Пишу виджет для 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
04.02.2014, 09:22
    #38548066
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательные выпадающие списки c цепной связью PHP+MySQL
А через 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
08.02.2014, 19:13
    #38554558
Centrovoy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательные выпадающие списки c цепной связью PHP+MySQL
Итак... 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
08.02.2014, 20:11
    #38554582
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательные выпадающие списки c цепной связью PHP+MySQL
Centrovoy,

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

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

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

Спасибо за разъяснения!
Очень помогли!
Теперь всё работает)
...
Рейтинг: 0 / 0
09.02.2014, 07:43
    #38554822
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательные выпадающие списки c цепной связью PHP+MySQL
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
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Последовательные выпадающие списки c цепной связью PHP+MySQL / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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