網頁下拉框聯動

網頁下拉框聯動,即第一個下拉框內容改變,則與之聯動的另一個下拉框的內容也隨之改變。這個功能javascript(以下簡稱js)或者jsp都可以實現,不過根據筆者經驗,除非萬不得已,能夠利用js實現的話就儘量不要使用jsp,因爲js是靜態語言,執行不需要和服務器聯繫 ,不論在速度上還是穩定性上都有很大的優越性。下面就以js實現之。


 

下拉框的條目內容如果是事先確定的並且數量較少,那麼可以事先定義兩個數組,將下拉框的條目內容存進去,爲了實現上的方便,你可以利用下標對照進行存儲,當然,你也可以用別的方法,只要可以做到第一級下拉框和二級的條目對應起來就行了。我們以下標對照存儲爲例。

 

比方說第一級下拉框的內容爲A,B,C;當選定A時,二級下拉框內容爲112233,選定B時,二級下拉框內容爲445566選定C時,二級下拉框內容爲778899;這樣的話我們定義的兩個數組爲:

 

var quanbu1 = new Array(A,A,A,B,B,B,C,C,C);

var quanbu2 = new Array(11,22,33,44,55,66,77,88,99);

 

但是其實大部分情況的聯動下拉框中的條目是從數據庫中取出來的,這個時候就需要先從數據庫中取出數據,然後再將所有的條目內容放到這兩個靜態數組中去,以後的聯動就不需要刷新頁面,完全是js靜態的了。利用jsp連接數據庫並且取數據這裏就不細說了,反正取出來的是一個resultset,假設名字是rs,下面就是將rs中的數據放入靜態數組的語句,這裏一級和二級下拉框條目放在rs的第一、第三列。

 

<script language="JavaScript" type="text/JavaScript">

var quanbu1 = new Array();

var quanbu2 = new Array();

<%

int i = 0;

while(rs.next())

{

//初始化爲實現下拉列表聯動的靜態數組

%>

lenlen = <%= i + 1%>;//靜態數組長度

quanbu1[<%= i %>] = "<%= rs.getString(1).trim() %>";

quanbu2[<%= i %>] = "<%= rs.getString(3).trim() %>";

<%

i++;

}

%>

</script>

 

初始化下拉條目數組之後,你可以構造第一級和第二級下拉框了,這我就不細說了,你只要記着定義第一級它的onchage函數指向你定義的js函數就可以了,例如:

 

第一級下拉框:

<select name="hexi" οnchange="changelist();">

<option value='A'>A</option>

<option value='B'>B</option>

<option value='C'>C</option>

</select>

第二級下拉框:

<select name="cezhan" >

<option value='11'>11</option>

<option value='22'>22</option>

<option value='33'>33</option>

</select>

 

下面是實現聯動的changelist函數:

function changelist()

{ //取第一級下拉框當前內容

var first=document.formone.hexi.options[document.formone.hexi.selectedIndex].value;

var yumenlen;//二級下拉框條目數

var m = 0;

var n = 0;

while(quanbu1[n] != null){

if(quanbu1[n] == first){

yumen [m] = quanbu2[n];//構造當前二級下拉框條目內容數組

m++;

}

n++;

}

yumenlen = m;

parent.topFrame.document.all.cezhan.length=0;//清空二級下拉框條目

for(var i=0;i<yumenlen;i++)

{//構造下拉條目

var lastOption = document.createElement_x("OPTION");

document.all.cezhan.options.add(lastOption);

lastOption.innerText =yumen[i];

lastOption.value=yumen[i];

}

}

 

 

 

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.util.*,online.*" errorPage="" %>
<jsp:useBean id="DBConn" class="online.DBConn" scope="session"></jsp:useBean>
<%
DBConn db=new DBConn();
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSF 'MyJsp.jsp' starting page</title>
<script language = "JavaScript">
var onecount;
onecount=0;
subcat = new Array();
<%
int count = 0;
ResultSet rs = db.executeQuery("select * from chapter order by chapterID");//讀取數據
while(rs.next())
{
    String P1=rs.getString("courseName");;//轉換字符類型
String P2=rs.getString("chapterName");
%>
subcat[<%=count%>] = new Array("<%=P2%>","<%=P1%>","<%=P2%>");//產生數組
<%
        count = count + 1;
}
%>
onecount=<%=count%>;

function change(id)
    {
    document.form.P2.length = 0;
   
    var id=id;
    var i;
    document.form.P2.options[0] = new Option('--選擇--','');
    for (i=0;i < onecount; i++)
        {
    var p=subcat[i][1];
    if(p==id)
    {
                document.form.P2.options[document.form.P2.length] = new Option(subcat[i][0], subcat[i][2]);
    }      
        }
    document.form.P2.focus();       
    }     
   
</script>

</head>

<body>
<form name="form">
分類:
<select name="P1" onChange="change(document.form.P1.options[document.form.P1.selectedIndex].value)">
<option value="">--選擇--</option>
<%
String sql = "select * from course order by courseID asc";
ResultSet rs1 = db.executeQuery(sql);
while(rs1.next())
{
String P1=rs1.getString("courseName");
%>
    <option value="<%=P1%>"><%=P1%></option>
<%
}
%>
</select>
<select name="P2" >
<option value="">==選擇==</option>
</select>
</form>
<%
db.close();
%>
</body>
</html>

發佈了27 篇原創文章 · 獲贊 17 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章