Mon 13 Jun 2005 10:02:35
ขอโทษนะครับที่อาจทำให้คุณ siriluk_th เข้าใจผิดนะครับ concept ของระบบนี้คือต้องเขียน javascrip ด้วยภาษาที่คุณใช้ ในกรณีนี้คือ ASP โดยต้องการให้แสดงผลดังนี้
กรณีเลือก combo a เป็น 1 combo b จะได้ 1.1,1.2,1.3
กรณ๊เลือก combo b เป็น 2 combo b จะได้ 2.1,2.2,2.3
โดยในตารางฐานข้อมูลมีโครงสร้างข้อมูลดังนี้
#sample_tbl
| id | parent | value |
--------------------------------------
| 1 | 1 | 1.1 |
--------------------------------------
| 2 | 1 | 1.2 |
--------------------------------------
| 3 | 1 | 1.3 |
--------------------------------------
| 4 | 2 | 2.1 |
--------------------------------------
| 5 | 2 | 2.2 |
--------------------------------------
| 6 | 2 | 2.3 |
จะได้ code ดังนี้ครับ
<script language="javascript">
function showSub(obj)
{
var theForm = obj.form;
switch(obj.value)
{
case "1":
{
<%
connect_string = "Driver={Mysql}; Server=localhost;
Database=domainname_com; UID=username; PWD=password" set dbConn = server.createObject ("ADODB.connection")
dbConn.open connect_string
mySQL="select * from asptest WHERE parent=1"
set rstemp=dbConn.execute(mySQL)
If rstemp.eof then
response.write "No records matched"
response.write mySQL & "So cannot make table..."
connection.close
set connection=nothing
response.end
end if
set i = 0;
DO UNTIL rstemp.eof
key = rstemp("id")
value = rstemp("value")
response.write "theForm.b.options["& i &"] = new Option('" & key & "','" & value & "');"
i += i+1
rstemp.movenext
LOOP
set rstemp=nothing
dbConn.close
set dbConn=nothing
%>
}
break;
case "2":
{
<%
connect_string = "Driver={Mysql}; Server=localhost;
Database=domainname_com; UID=username; PWD=password" set dbConn = server.createObject ("ADODB.connection")
dbConn.open connect_string
mySQL="select * from asptest WHERE parent=2"
set rstemp=dbConn.execute(mySQL)
If rstemp.eof then
response.write "No records matched"
response.write mySQL & "So cannot make table..."
connection.close
set connection=nothing
response.end
end if
set i = 0;
DO UNTIL rstemp.eof
key = rstemp("id")
value = rstemp("value")
response.write "theForm.b.options["& i &"] = new Option('" & key & "','" & value & "');"
i += i+1
rstemp.movenext
LOOP
set rstemp=nothing
dbConn.close
set dbConn=nothing
%>
}
break;
}
</script>
การตรวจเช็คโค๊ดคือต้องการให้แสดงผลได้ดังนี้ครับ
<scrip language="javascript">
function showSub(obj)
{
var theForm = obj.form;
case "1":
{
theForm.b.options[0] = new Option('1','1.1');
theForm.b.options[1] = new Option('2','1.2');
theForm.b.options[2] = new Option('3','1.3');
}
break;
case "2":
{
theForm.b.options[0] = new Option('4','2.1');
theForm.b.options[1] = new Option('5','2.2');
theForm.b.options[2] = new Option('6','2.3');
}
break;
}
</script>
ส่วน function ในการเคลียร์ค่าภายในของ select ก็มีครับโดยใช้ javascript เหมือนเดิมครับ เขียนได้ดังนี้
obj.length = 0; เมื่อในกรณีของคุณจะได้เป็น theForm.b.length = 0; ครับ
Mon 9 Jan 2006 10:03:28
ถ้าเป็น php ละครับเขียนยังไง แบบเลือกจังหวัดที่ combo แรกแล้วให้แสดงอำเภอใน combo ที่สอง ครับ ทุกอย่างดึงมาจาก base นะครับ
db
--------------------------------------------------
| id | parent | name |
--------------------------------------------------
| 1 | 0 | Bangkok |
--------------------------------------------------
| 2 | 0 | Nonthaburi |
--------------------------------------------------
| 3 | 1 | Pranakorn |
--------------------------------------------------
| 4 | 1 | Bangruk |
--------------------------------------------------
| 5 | 2 | Bangbuatong |
--------------------------------------------------
| 6 | 2 | Bangkruay |
--------------------------------------------------
php
<?
$link = mysql_connect($host, $uid, $pass);
mysql_select_db($db_name, $link);
$res = mysql_query("SELECT id, name FROM table_name WHERE parent=0", $link);
if(mysql_num_rows($res)){
echo "<script language=\"javascript\">";
echo "function showSub(obj){";
echo "var theform = obj.form;";
echo "theform.b.length = 0;
echo "switch(obj.value){";
while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
echo "case ".$row["id"].": {";
$lres = mysql_query("SELECT id, name FROM table_name WHERE parent=".$row["id"], $link);
if(mysql_num_rows($lres)){
$i = 0;
while($lrow = mysql_fetch_array($lres, MYSQL_ASSOC)){
echo "theform.b.options[".$i."] = new Option('".$lrow["id"]."','".$lrow["name"]."');";
echo "}";
echo "break;";
}
}
}
echo "}";
echo "}";
echo "</script>";
}
mysql_free_result($res);
mysql_close($link);
?>
โค๊ดทั้งหมดประมาณนี้ครับ ยังไม่ได้ทำการ debug นะครับด้นให้สดๆ
Wed 25 Jan 2006 23:44:13
ช่วยเพิ่มเติมให้ผมหน่อยนะครับคืออย่างนี้นะครับ
<script language="Javascript">
function changecity(obj){
var theform = obj.form;
theform.city.length = 0;
switch(obj.value){
case "กระบี่":
{
theform.city.options[0] = new Option('อำเภอเมืองจังหวัดกระบี่','อำเภอเมืองจังหวัดกระบี่');
theform.city.options[1] = new Option('เกาะลันตา','เกาะลันตา');
theform.city.options[2] = new Option('เหนือคลอง','เหนือคลอง');
theform.city.options[3] = new Option('ปลายพระยา','ปลายพระยา');
theform.city.options[4] = new Option('เขาพนม','เขาพนม');
theform.city.options[5] = new Option('อ่าวลึก','อ่าวลึก');
theform.city.options[6] = new Option('คลองท่อม','คลองท่อม');
theform.city.options[7] = new Option('ลำทับ','ลำทับ');
theform.city.disabled = false;
}
break;
</script>
คือตามข้างบนนี้ถ้าผมเลือกจังหวัดนี้แล้วจะแสดงชื่ออำเภอของจังหวัดนั้นออกมาแล้วขอให้เพิ่มเติมหน่อยนะครับ คือเวลาเลือกที่อำเภอนั้นจะให้ รหัสไปรษณีย์ ขึ้นอีก textbox หนึ่งจะต้องทำยังงัยครับ
ช่วยแก้ไขให้ผมหน่อยนะครับ
ขอบคุณมากครับ
<script language="javascript">
function changecity(obj){
....
}
function changezip(obj){
var theform = obj.form;
switch(obj.value){
case 'อำเภอเมืองจังหวัดกระบี่': theform.zip.value = '12345'; break;
case 'เกาะลันตา': theform.zip.value = '23456'; break;
case 'เหนือคลอง': theform.zip.value = '34567'; break;
....
}
}
</script>
<select name="city" onchange="changezip(this)">
...
</select>
<input type="text" name="zip">
ประมาณนี้ครับ เอาเป็นไกด์นะครับ
Fri 17 Nov 2006 01:31:38
ช่วยหน่อยครับทำมา 3 คืนแล้วไม่ได้
คือต้องการทำ Combo Box แบบสามชั้น
โดยดึงข้อมูลมาจากฐานข้อมูล
เช่น เลือก จังหวัด > อำเภอ > ตำบล
เขียนกับ (Java+PHP) หรือ (Java+AJAX) ก็ได้ครับ
ขอบคุณมากครับ
Sat 6 Sep 2008 20:47:51
include "common.inc.php";
$link = mysql_connect("$server","$user","$pass");
mysql_select_db("$databasename",$link);
$res = mysql_query("SELECT id, name FROM office WHERE parent =0", $link)or die(mysql_error());
if(mysql_num_rows($res)){
echo "<script language=\"javascript\">";
echo "function showSub(obj){";
echo "var theform = obj.form;";
echo "theform.b.length = 0;";
echo "switch(obj.value){";
while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
echo "case ".$row["id"].": {";
$lres = mysql_query("SELECT id, name FROM office WHERE parent=".$row["id"], $link);
if(mysql_num_rows($lres)){
$i = 0;
while($lrow = mysql_fetch_array($lres, MYSQL_ASSOC)){
echo "theform.b.options[".$i."] = new Option('".$lrow["id"]."','".$lrow["name"]."');";
echo "}";
echo "break;";
}
}
}
echo "}";
echo "}";
echo "</script>";
}
?>
<select name="a"onchange="showSub(this)">
<? $sql="SELECT * FROM office Order by id";
$result=mysql_query($sql);
while($myrow = mysql_fetch_array($result,MYSQL_ASSOC))
{?>
<option value="<?=$myrow["parent"]?>">
<?=$myrow["parent"] ?>
</option>
<? }?>
</select>
<select name="b">
<option>
</option>
</select>
<?
mysql_free_result($res);
mysql_close($link);
?>
Sat 6 Sep 2008 20:49:58
Sun 7 Sep 2008 04:24:34

















