Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамический <SELECT> (не AJAX)
 
 автор: kukuikar   (10.01.2008 в 01:56)   письмо автору
 
 

есть массивы:

var c1 = new Array();
c1[1] = "BBK";
c1[6] = "Odeon";
c1[7] = "Panasonic";
var c2 = new Array();
c2[1] = "BBK";
c2[2] = "Hyunday";
c2[5] = "LG";
c2[6] = "Odeon";
c2[7] = "Panasonic";
c2[9] = "Pioneer";
c2[10] = "SONY";
c2[11] = "Sven";
c2[13] = "Samsung";
c2[15] = "Denon";


и есть 2 <SELECT>


<select name="mod_cat" id="sselect" onchange="chcat();">
<option value="1">Портативные DVD</option>
<option value="2">DVD проигрыватели</option>
</select>

<select id="dselect" name="brand_id">
</select>


Так вот. Мне надо чтобы при выборе категории из select mod_cat в select brand_id загружались значения из соответствующих массивов. Но только чтобы option value были номера брендов. т.е. чтобы value шли не по порядку, а как в массиве c1[1] = "BBK", c1[6] = "Odeon";

Накалякал такую функцию

function chcat()
{
dselect = document.getElementById("dselect");
sselect = document.getElementById("sselect");

cat_id = sselect.selectedIndex + 1;
arr_name = "c"+cat_id;

arr_len = arr_name.Length;
for (var i=1; i<=arr_len; i++)
    {
    dselect.options[i] = new Option(i,arr_name[i]);
    }
}


Только не получается к массиву правильно обратится... :(
К AJAX не посылать :)
Помидорами бросать можно.

   
 
 автор: CNT   (10.01.2008 в 04:55)   письмо автору
 
   для: kukuikar   (10.01.2008 в 01:56)
 

В вашем конкретном случае я бы сделал так:
<script>
function f (x)
{
var t = x.selectedIndex;
with (document)
   {
   getElementById ('myCell').childNodes [0].style.display = (t == 1) ? 'inline' : 'none'; 
   getElementById ('myCell').childNodes [1].style.display = (t == 2) ? 'inline' : 'none'; 
   }
}
</script>

<table cellpadding="0" cellspacing="0"><tr>
<td
><select onchange="f (this)" style="margin-right: 20px">
<option>Выберите категорию
<option>Портативные DVD
<option>DVD проигрыватели
</select
></td>
<td id="myCell"
><select name="c1" style="display: none">
<option value="1">BBK
<option value="6">Odeon
<option value="7">Panasonic
</select
><select name="c2" style="display: none">
<option value="1">BBK
<option value="2">Hyunday
<option value="5">LG
<option value="6">Odeon
<option value="7">Panasonic
<option value="9">Pioneer
<option value="10">SONY
<option value="11">Sven
<option value="13">Samsung
<option value="15">Denon
</select
></td>
</tr>
</table>

Но если уж очень надо "динамически формировать", то пользуйте поиск - только я уже раза три (если не больше) писал здесь скрипт формирования второго select'a по выбору в первом.

   
 
 автор: kukuikar   (10.01.2008 в 08:02)   письмо автору
 
   для: CNT   (10.01.2008 в 04:55)
 

с формированием selecta нет проблем, с этим разобрался.

Я не сказал, что массивы получаю из MySQL базы, через PHP, и длина из может как увеличиваться, так и уменьшаться, т.е. я заранее не знаю сколько в массиве будет данных.

Проблема в том как мне обратиться к массиву, который определен вне функции.

Т.е. массивы вне функции с1...с27

А в функции как мне с ними работать?

Значениями массива то я заполню сам. Немогу обратиться к ним.

for(i=1;i<=27;i++)
{
arr_name = 'c'+i; //номер массива
arr_len = arr_name.length; // возвращвет длину строки arr_name
}


'c' + i в цикле дает просто строку 'c1...27'

   
 
 автор: kukuikar   (10.01.2008 в 11:09)   письмо автору
 
   для: kukuikar   (10.01.2008 в 01:56)
 

Все! Решил с помощью JSON. Вещь!
Вот код, может кому пригодится:

<script language="JavaScript" type="text/javascript">
function loadURL(list) {
  var url = list.options[list.selectedIndex].value;
  if (url != "") {
    location.href = url;
  }
}

var data = 
{
  "1" : [{"brand_id": "1", "brand_name": "BBK"},{"brand_id": "2", "brand_name": "JVC"},{"brand_id": "3", "brand_name": "SONY"}],
  "2" : [{"brand_id": "4", "brand_name": "PANASONIC"},{"brand_id": "5", "brand_name": "YAMAHA"}]
};

function loadElements(frm)
{
with (frm) 
    {
    var category = elements["categories"].options[elements["categories"].selectedIndex].value;
    if (category != "") 
        {
        var links = data[category];
        elements["brand_id"].options.length = 0;
        elements["brand_id"].options[0] = new Option("Выберите бренд...", "#");
        for (var i=0; i<links.length; i++)
            {
            elements["brand_id"].options[elements["brand_id"].options.length] = new Option(links[i].brand_name, links[i].brand_id);
            }
        }
    }
}

function clc()
{
var ss = document.getElementById("brand_id");
alert(ss.options[ss.selectedIndex].text + " = " + ss.value);
}
</script>
<form>
  <select name="categories" onchange="loadElements(this.form);">
      <option value="#">Выберите категорию</option>
    <option value="1">Портативные DVD</option>
    <option value="2">DVD проигрыватели</option>
  </select>
  <!-- select name="urls" onchange="loadURL(this);" -->
  <select name="brand_id" id="brand_id">
  </select>
  <input type="button" onclick="clc();"
</form>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования