Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   взаимосвязанные выпадающие списки (https://javascript.ru/forum/server/8632-vzaimosvyazannye-vypadayushhie-spiski.html)

SkyLight 11.04.2010 10:59

Вот теперь надо, чтобы это понял топик-стартер

xDMK 11.04.2010 16:40

понимаете, у меня все списки из базы данных. нужно чтобы когда я выбрал из первого списка например единицу появлялся второй список со своим диапазоном из бд где этот диапазон элементов равен 1. и тд. так как у меня не известны числа.. Если бы знать как получить доступ к элументу одного из options можно было просто запрограммировать что и как выводить во втором списке и тд. Я не давно изучаю Jquery и тем более ajax поэтому и спрашиваю вас. Как мне это сделать ? Хотябы пример моего бы случая.

Gvozd 11.04.2010 16:49

ваш случай стандартен чуть менее чем полностью
для него есть куча примеров на всех возможный фреймворках, и чистом JS
даже в гугле, первой строкой по "javascript динамические списки" вылазит то, что вам нужно, только без ajax
читайте, повторяйте, учите, пробуйте
если что-то конкретное не будет получатся, то задавайте конкретные вопросы. на общий вам уже дали ответ
если у вас совсем нчиего не поулчается, то вам в раздел работа

xDMK 20.05.2010 17:55

ajaxcascade.php
$db = mysql_connect("localhost", "alloall", "12345");
mysql_select_db("alloall",$db);
 if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
if ($_GET['cod_country'] == 1) {
$a = mysql_query("SELECT id, cod_contry FROM alloall_code WHERE cod_zone=1");	

// Так как запрос возвращает несколько строк, применяем цикл
print "[";
while($b = mysql_fetch_array($a))
{
print "{value:\"".$b['id']."\",text:\"".$b['cod_contry']."\"}"; //создаем циклический список
}

print "]";
}
else {echo "mysql_error";
exit();
}
}


index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
 <link rel="stylesheet" type="text/css" href="css/main.css">
<style type="text/css">
<!--
.alloallru {
    font-family: Mistral;
    font-size: 40x;
    font-weight: bold;
}
-->
</style>

        <link href="tpl/templates/css/style.css" rel="stylesheet" type="text/css">

<script src="js/jquery-1.3.1.js" type="text/javascript"></script>

        <script type="text/javascript" src="tpl/templates/js/jquerykeypad.js"></script>


  <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 countryValue = $('#cod_country').val();
  	var tmpSelect = $('#cod_contry');
  	if(countryValue.length == 0) {
  		tmpSelect.attr('disabled','disabled');
  		tmpSelect.clearSelect();
  		adjustModel();
  	} else {
  		$.getJSON('ajaxcascade.php',{cod_country:countryValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); adjustModel(); });
  		
  	}
  };
  // выбор модели
  function adjustModel(){
  	var countryValue = $('#cod_country').val();
  	var autoValue = $('#cod_contry').val();
  	var tmpSelect = $('#model');
  	if(countryValue.length == 0||autoValue.length == 0) {
  		tmpSelect.attr('disabled','disabled');
  		tmpSelect.clearSelect();
  	} else {
  		$.getJSON('cascadeSelectModel.php',{country:countryValue,auto:autoValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); });
  	}
  };
	
  $('#cod_country').change(function(){
  	adjustAuto();
  }).change();
  $('#cod_contry').change(adjustModel);
  $('#model').change(function(){
  	if($(this).val().length != 0) { alert('Выбор сделан!'); }
  });

});
</script>
</head>
<body>

<h3 align="left">Введите номер для поиска</h3> 
<form action = "" method="POST" enctype="multipart/form-data"> 
 <table border="0">
 <tr>
 <td>

  <select id="cod_country">
    <option value="">Выбрать страну</option>
    <option value="1">Германия</option>
    <option value="2">Ю.Корея</option>
    <option value="3">Япония</option>
  </select>
  </div>
</td>
 <td>
<select id="cod_contry" name="cod_contry" disabled="disabled"></select>
 </td>
 <td>
<select  id="model" name="cod_def" disabled="disabled"></select>
</td>
<td width="100%">
<input type="text" name = "nkod" id="defaultKeypad">
<strong>@allo<span class="alloallru">all</span>.ru</strong>
<input type="submit" value="Поиск" name="submit">
</form>
</td>

</tr>
<tr>
<td><div id="div"></div></td>

</tr>
</table>

</body>
</html>


Покажите мне ошибку в этом коде? Я сижу не понимаю

Skipp 20.05.2010 17:55

Форматируй текст

xDMK 20.05.2010 22:46

но что форматировать.? мне нужно соединение с бд.. может кто поможет?

Gvozd 21.05.2010 00:13

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

xDMK 21.05.2010 10:49

Отформатировал код.. подскажите что нить?

SkyLight 21.05.2010 11:33

У вас создается массив объектов. А чем вы разделяете элементы? И вообще, есть функция json_encode, если что.

xDMK 21.05.2010 11:50

я как бы создал шаблон. И делаю его в цикле. А json encode нету. Пробывал по разному делать циклы и всё равно он понимает только своё. А переменные он не понимает.


Часовой пояс GMT +3, время: 00:03.