|
|
|
| есть 2 таблицы в бд mysql
1я таблица - список разделов такого вида:
+---+----------+
| id | name |
+---+----------+
2я таблица - таблица подразделов:
+----+--------------+-----------+
| id | subname | subid |
+----+--------------+-----------+
поле id первой таблицы соответствует полю id второй таблицы
в первой таблице содержится названия и id разделов во второй названия всех подразделов
через html хочу сделать 2 списка чтобы в первом можно было выбрать раздел а во втором отображались только подразделы этого раздела
первый список я сделал:
$query="SELECT * FROM table1";
$result = MYSQL_QUERY($query);
if($result)
$number = MYSQL_NUMROWS($result);
if($number>0)
{
print "<select id=\"razdel\" name=\"razdel\" onchange=\"show_subs();\">";
print "<option value=\"\"></option>";
for($i=0;$i<$number;$i++)
{
$row=mysql_fetch_array($result);
print "<option value=\"".$row['id']."\">".$row['name']."</option>";
}
print "</select>";
}
|
а вот как написасть show_subs() - чтобы заработал второй список чего-то никак собразить не могу =(
хочу все это сделать с помощью javascript чтобы не заставлять пользователя нажимать лишние конпки | |
|
|
|
|
|
|
|
для: HeoH
(03.12.2004 в 23:51)
| | могу предложить следующее
<html>
<head>
<script language="JavaScript">
dir = new Array()
dir[0] = new Array()
dir[0][0]=new dir_qrec("sub1_1","value1_1")
dir[0][1]=new dir_qrec("sub1_2","value1_2")
dir[0][2]=new dir_qrec("sub1_3","value1_3")
dir[1] = new Array()
dir[1][0]=new dir_qrec("sub2_1","value2_1")
dir[1][1]=new dir_qrec("sub2_2","value2_2")
dir[1][2]=new dir_qrec("sub2_3","value2_3")
function dir_qrec(subname,subid){
this.subname=subname
this.subid=subid
return this
}
function show_subs1()
{
for (var i=0;i<dir[0].length;i++)
{
document.write("<option value='"+dir[0][i].subid+"'>"+dir[0][i].subname+"</option>")
}
}
function show_subs()
{
k=document.form1.menu1.selectedIndex
for (var i=0;i<dir[k].length;i++)
{
document.form1.menu2.options[i].text=dir[k][i].subname
document.form1.menu2.options[i].value=dir[k][i].subid
}
}
</script>
</head>
<body>
<form name="form1">
<select name="menu1" onChange="show_subs();">
<option selected>unnamed1</option>
<option>unnamed2</option>
</select>
<br>
<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs1();
//->
</script>
</select>
</form>
</body>
</html>
|
в массив dir зделайте запись из БД сами, думаю справитесь, если не получется пишите
если что-то не понятно, объясню, пишите | |
|
|
|
|
|
|
|
для: Crux
(04.12.2004 в 15:38)
| | <html>
<head>
<script language="JavaScript">
dir = new Array()
dir[0] = new Array()
dir[0][0]=new dir_qrec("sub1_1","value1_1")
dir[0][1]=new dir_qrec("sub1_2","value1_2")
dir[0][2]=new dir_qrec("sub1_3","value1_3")
dir[1] = new Array()
dir[1][0]=new dir_qrec("sub2_1","value2_1")
dir[1][1]=new dir_qrec("sub2_2","value2_2")
dir[1][2]=new dir_qrec("sub2_3","value2_3")
function dir_qrec(subname,subid){
this.subname=subname
this.subid=subid
return this
}
function show_subs1()
{
for (var i=0;i<dir[0].length;i++)
{
document.write("<option value='"+dir[0][i].subid+"'>"+dir[0][i].subname+"</option>")
}
}
function show_subs()
{
k=document.form1.menu1.selectedIndex
for (var i=0;i<dir[k].length;i++)
{
document.form1.menu2.options[i].text=dir[k][i].subname
document.form1.menu2.options[i].value=dir[k][i].subid
}
}
</script>
</head>
<body>
<form name="form1">
<select name="menu1" onChange="show_subs();">
<option selected>unnamed1</option>
<option>unnamed2</option>
</select>
<br>
не правильно в первом случае,должно быть вот так
<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs1();
//->
</script>
</select>
</form>
</body>
</html> | |
|
|
|
|
|
|
|
для: Crux
(04.12.2004 в 17:05)
| | блин косяки
и исправить не могу | |
|
|
|
|
|
|
|
для: Crux
(04.12.2004 в 17:09)
| | ещё одна попытка
<html>
<head>
<script language="JavaScript">
dir = new Array()
dir[0] = new Array()
dir[0][0]=new dir_qrec("sub1_1","value1_1")
dir[0][1]=new dir_qrec("sub1_2","value1_2")
dir[0][2]=new dir_qrec("sub1_3","value1_3")
dir[1] = new Array()
dir[1][0]=new dir_qrec("sub2_1","value2_1")
dir[1][1]=new dir_qrec("sub2_2","value2_2")
dir[1][2]=new dir_qrec("sub2_3","value2_3")
function dir_qrec(subname,subid){
this.subname=subname
this.subid=subid
return this
}
function show_subs1()
{
for (var l=0;l<dir[0].length;l++)
{
document.write("<option value='"+dir[0][l].subid+"'>"+dir[0][l].subname+"</option>")
}
}
function show_subs()
{
k=document.form1.menu1.selectedIndex
for (var l=0;l<dir[k].length;l++)
{
document.form1.menu2.options[l].text=dir[k][l].subname
document.form1.menu2.options[l].value=dir[k][l].subid
}
}
</script>
</head>
<body>
<form name="form1">
<select name="menu1" onChange="show_subs();">
<option selected>unnamed1</option>
<option>unnamed2</option>
</select>
<br>
<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs1();
//->
</script>
</select>
</form>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: Crux
(04.12.2004 в 17:09)
| | cheops
я наверное понял что за косяки в коде у меня использовалась переменная i и там где она стояла в [ ], ваш скрипт перепровлял всё последующее в наклонное положение...
наверное лучше если текст выделяется тэгом code все остальные тэги не срабатывали | |
|
|
|
|
|
|
|
для: Crux
(04.12.2004 в 17:17)
| | огромное спасибо!!!
jаvascript приходится изучать буквально налету =(( | |
|
|
|
|
|
|
|
для: Crux
(04.12.2004 в 17:09)
| | >function show_subs1()
>{
>for (var l=0;l<dir[0].length;l++)
> {
> document.write("<option
>value='"+dir[0][l].subid+"'>"+dir[0][l].subname+"</option>")
> }
>}
Все вроде ок,
но только из-за этой функции не корректно работает - она создает первоначальный список, элементы которого уже потом меняются.
У меня первый массив dir[0] состоит из одного элемента (пустого) - создается список из одного элемента, но следующие массивы у меня из одного и более элементов - при изменении первого списка во втором списке меняется только один первый элемент остальные вобще не отображаются как это поправить? | |
|
|
|
|
|
|
|
для: HeoH
(04.12.2004 в 22:32)
| | хм...
об этом я не подумал...
в ближайщее время попробую что-нибудь придумать | |
|
|
|
|
|
|
|
для: Crux
(05.12.2004 в 17:55)
| | перепешите функцию show_subs()
вот так вот
function show_subs()
{
var k=document.form1.menu1.selectedIndex
var listObj=document.form1.menu2
listObj.length=0
for (var j=0; j<dir[k].length; j++)
{
listObj.options[j]=new Option(dir[k][j].subname)
document.form1.menu2.options[j].value=dir[k][j].subid
}
listObj.options[0].selected=true
}
|
| |
|
|
|
|
|
|
|
для: Crux
(05.12.2004 в 18:14)
| | >У меня первый массив dir[0] состоит из одного элемента (пустого)
тогда можно всё упростить убрать лишнию функцию
т.е. это всё должно выглядеть так:
<html>
<head>
<script language="JavaScript">
dir = new Array()
dir[0] = new Array()
dir[0][0]=new dir_qrec("","")
dir[1] = new Array()
dir[1][0]=new dir_qrec("sub1_1","value1_1")
dir[1][1]=new dir_qrec("sub1_2","value1_2")
dir[2] = new Array()
dir[2][0]=new dir_qrec("sub2_1","value2_1")
dir[2][1]=new dir_qrec("sub2_2","value2_2")
dir[2][2]=new dir_qrec("sub2_3","value2_3")
function dir_qrec(subname,subid){
this.subname=subname
this.subid=subid
return this
}
function show_subs()
{
var k=document.form1.menu1.selectedIndex
var listObj=document.form1.menu2
listObj.length=0
for (var j=0; j<dir[k].length; j++)
{
listObj.options[j]=new Option(dir[k][j].subname)
document.form1.menu2.options[j].value=dir[k][j].subid
}
listObj.options[0].selected=true
}
</script>
</head>
<body>
<form name="form1">
<select name="menu1" onChange="show_subs();">
<option selected>unnamed1</option>
<option>unnamed2</option>
<option>unnamed3</option>
</select>
<br>
<select name="menu2" onChange="">
<option></option>
</select>
</form>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: Crux
(05.12.2004 в 19:23)
| | супер имеено то, что нужно!
еще раз огромное спасибо!!! | |
|
|
|