Перейти к содержимому

Фотография
- - - - -

Связанные выпадающие списки


  • Вы не можете создать новую тему
  • Закрытая тема Тема закрыта
В теме одно сообщение

#1 Katerina

Katerina

    Прохожий

    Топикстартер
  • Участник
  • 2
    31 сообщ.

Отправлено 01 Ноябрь 2010 в 16:32

Помогите? уже неделю не могу решить проблему

Нужно сделать несколько взаимосвязанных списков, каждый из которых зависит от предыдущего. Значения берутся из БД.

Начало работает правильно. Соединяюсь с БД и заполняю первый селект
<script type="text/javascript">
(function($){
  // очищаем select
  $.fn.clearSelect = function() {
	  return this.each(function(){
		  if(this.tagName=='SELECT') {
		      this.options.length = 0;
		      $(this).attr('disabled','disabled');
		  }
	  });
  }
  // заполняем select
  $.fn.fillSelect = function(dataArray) {
	  return this.clearSelect().each(function(){
		  if(this.tagName=='SELECT') {
			  var currentSelect = this;
			  $.each(dataArray,function(index,data){
				  var option = new Option(data.text,data.value);
				  if($.support.cssFloat) {
					  currentSelect.add(option,null);
				  } else {
					  currentSelect.add(option);
				  }
			  });
		  }
	  });
  }
})(jQuery);
</script>
<script type="text/javascript">
$(document).ready(function(){

  // выбор категории
  function adjustAuto(){
  	var firmaValue = $('#firma').val();
  	var tmpSelect = $('#auto');
	
 	if(firmaValue.length == 0) {
  		tmpSelect.attr('disabled','disabled');
  		tmpSelect.clearSelect();
  		adjustModel();
  	} else {
  		$.getJSON('cascadeSelectAuto.php',{firma:firmaValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); adjustModel(); });
  		
  	}
  };
  // выбор модели
  function adjustModel(){
  	var firmaValue = $('#firma').val();
  	var autoValue = $('#auto').val();
  	var tmpSelect = $('#model');
  	if(firmaValue.length == 0||autoValue.length == 0) {
  		tmpSelect.attr('disabled','disabled');
  		tmpSelect.clearSelect();
  	} else {
  		$.getJSON('cascadeSelectModel.php',{firma:firmaValue,auto:autoValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); });
  	}
  };
	
  $('#firma').change(function(){
  	adjustAuto();
  }).change();
  $('#auto').change(adjustModel);
  $('#model').change(function(){
  	if($(this).val().length != 0) { alert('Оборудование выбрано!'); }
  });

});
</script>
<body>
<?php
$link = mysql_connect("localhost", "root")
or die("Не могу подключиться");
print ("Соединение выполнено");
$link = mysql_connect("localhost", "root")
or die("Не могу подключиться" );
// сделать test текущей базой данных
mysql_select_db('spiski', $link) or die ('Не могу выбрать БД');
$result = mysql_query ("select * from firma_oborud", $link);
mysql_free_result($result);

?>
<table cellpadding="10">
<tr>
<td >
  <p >
  <label>Оборудование</label><br />
  
  
<!-- Первый (главный) список -->
  <select id="List1">
    <option value="0">Выбирите производителя</option>
  
  <?php
  $result = mysql_query ("select * from firma_oborud", $link);
while ($row = mysql_fetch_assoc($result))
{
echo '<option value="'.$row['firma1_id'].'">'.$row['name'].'</option>';
}
?>
  </select>

<!-- Подчиненный список 1 (изначально пуст) -->
  <select id="List2" disabled="disabled"></select>
  
<!-- Подчиненный список 2 (изначально пуст) -->
  <select id="List3" disabled="disabled"></select>


Эти списки заполняем при помощи вызова вот такой пхп страницы
<?php

header('Content-Type: text/html; charset=utf-8');

$a=$_GET['firma']; $n=0;
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 	$res = mysql_query ("select * from tip_oborud where type1_id = $a", $link);
while ($row = mysql_fetch_assoc($res))

$nam = $row['name'];
print '[{value:"$n",text:"$nam"}]';
$n=$n+1;
}}
?>

И ничего не выходит, только первый селект заполнен,а остальные пустые и не активируются.
Что не так? Где править и на что?

Сообщение отредактировал Katerina: 01 Ноябрь 2010 в 16:33

  • 0

Спонсор

#2 Katerina

Katerina

    Прохожий

    Топикстартер
  • Участник
  • 2
    31 сообщ.

Отправлено 03 Ноябрь 2010 в 11:38

Первый вопрос решила по другому, теперь все 3 списка светятся, но вот теперь другая проблема не могу передать данные в 4-ый селект,подскажите как правильно организовать конструкцию метода пост
<?php
// указываем параметры для подключения к MySQL
$host='localhost'; // имя хоста
$database='spiski'; // имя базы данных
$user='root'; // заданное вами имя пользователя
$pswd=''; // заданный вами пароль
// подключаемся к MySQL
$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
mysql_select_db($database) or die("Не могу подключиться к базе.");


function is_sel($a, $field)
{
  $b = isset($_POST[$field])?$_POST[$field]:NULL;
  if($a == $b) return 'selected="selected"';
}

$res = mysql_query('SELECT * FROM firma_oborud');
?>
<form id="frm" method="post">
<select name="firma" onchange="document.getElementById('frm').submit()" >
<option value='null'>- Выберите производителя -</option>
<?
// выводим все строки из столбца name таблицы firma
    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['firma1_id'],'firma')." value='" . $row['firma1_id'] . "'>" . $row['name'] . "</option>\r\n";
echo "</select>";
echo "<br/>";

if(isset($_POST['firma']))
{
  $res=mysql_query('SELECT * FROM tip_oborud WHERE firma1_id="'.(int)$_POST['firma'].'"');

  echo "<select name=\"tip\" onchange=\" document.getElementById('frm').submit();\" >
    <option  id=\"tip\" value='0'>- Выберите категорию -</option>";

    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['type1_id'],'tip')." value='" . $row['type1_id'] . "'>" . $row['name'] . "</option>\r\n";

  echo "</select>";
}
echo "<br/>";
$tip = isset($_POST['tip'])?$_POST['tip']:NULL;
if($tip && $tip !== 0)
{
  $res=mysql_query('SELECT * FROM prod_oborud WHERE type1_id='.(int)$_POST['tip']);

  echo "<select id=\"model\" name=\"model\" onchange=\"document.getElementById('frm').submit()\" >
    <option  value='0'>- Выберите модель -</option>";

    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['prod1_id'],'model')." value='" . $row['prod1_id'] . "'>" . $row['name'] . "</option>\r\n";

  echo "</select>";
}
echo "<br/>";
$ant = (isset($_POST['ant'])?$_POST['ant'])?$_POST['ant']:NULL;      вот тут не правильно  передаю

if($ant && $ant !== 0)
{
  $res=mysql_query('SELECT * FROM antena WHERE id='.(int)$_POST['ant']);

  echo "<select id=\"tipant\" name=\"tipant\" onchange=\"document.getElementById('frm').submit()\" >
    <option  value='0'>- Выберите антенну -</option>";

    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['id'],'antena')." value='" . $row['id'] . "'>" . $row['name'] . "</option>\r\n";

  echo "</select>";
}
echo '</form>';

$ant = isset($_POST['tipant'])?$_POST['tipant']:NULL;
if($ant && $ant !== 0)
{
  $res=mysql_query('SELECT * FROM antena WHERE id='.(int)$_POST['tipant'].' LIMIT 1');
  $row = mysql_fetch_array($res);
  echo "<h1>Хочу ".$row['name']."!</h1>";
}
?>

все во всем разобралась, тему можно закрыть

Сообщение отредактировал Katerina: 02 Ноябрь 2010 в 17:57

  • 1



Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение
Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей