<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    最近發(fā)現(xiàn)CSDN上有很多人在詢問(wèn)?有關(guān)聯(lián)動(dòng)的下拉列表的問(wèn)題,所以在此做以總結(jié),希望還有新的實(shí)現(xiàn)方法,這里介紹三中實(shí)現(xiàn)方法,包括一個(gè)簡(jiǎn)單的AJAX版的聯(lián)動(dòng).

    ????????? 下拉列表聯(lián)動(dòng)有很多方法可以實(shí)現(xiàn):

    ????????? 1.JavaScript實(shí)現(xiàn),JS實(shí)現(xiàn)無(wú)非在效率上是最優(yōu)的,而且用戶體驗(yàn)性也很好,但是它的缺點(diǎn)就是兩個(gè)下拉列表的值是固定死的,所以可擴(kuò)展性和靈活度不夠.下面是一個(gè)JS實(shí)現(xiàn)的省市聯(lián)動(dòng).

    ??????????? 首先是shengshi.js文件的代碼:

    //定義分隔符,用于分割[select]變量
    var?TheSplit1?=?"*"????????//一級(jí)選項(xiàng)與一級(jí)選項(xiàng)之間的分隔符
    var?TheSplit2?=?"|"????????//一級(jí)選項(xiàng)與二級(jí)選項(xiàng)之間的分隔符
    var?TheSplit3?=?"^"????????//二級(jí)選項(xiàng)與二級(jí)選項(xiàng)之間的分隔符
    var?TheSplit4?=?"@"????????//選項(xiàng)文本與選項(xiàng)值的分隔符,可以省略[值為選項(xiàng)文本值]

    /**//*
    定義[select]框選項(xiàng)變量,這里以省市二級(jí)為例
    例:一級(jí)選項(xiàng)一|二級(jí)選項(xiàng)一^二級(jí)選項(xiàng)二^二級(jí)選項(xiàng)三*一級(jí)選項(xiàng)二|*二級(jí)選項(xiàng)三|
    *香港|*澳門
    注:當(dāng)一級(jí)選項(xiàng)沒有二級(jí)下屬時(shí),請(qǐng)?jiān)诤竺婕由蟃heSplit2分隔符,否帽關(guān)聯(lián)將會(huì)出錯(cuò),所以應(yīng)該注意防止此類錯(cuò)誤發(fā)生
    如果選項(xiàng)文本與選項(xiàng)值不同時(shí),請(qǐng)?jiān)谶x項(xiàng)文本后加上@值格式:[Text@Value]
    如:北京@010|東城@0101^西城@0102
    */

    var?hwallselecttext?
    =?"北京|東城^西城^崇文^宣武^朝陽(yáng)^豐臺(tái)^石景山^海淀^門頭溝^房山^通州^順義^昌平^大興^平谷^懷柔^密云^延慶*上海|黃浦^盧灣^徐匯^長(zhǎng)寧^靜安^普陀^閘北^虹口^楊浦^閔行^寶山^嘉定^浦東^金山^松江^青浦^南匯^奉賢^崇明*天津|和平^東麗^河?xùn)|^西青^河西^津南^南開^北辰^河北^武清^紅撟^塘沽^漢沽^大港^寧河^靜海^寶坻^薊縣*重慶|萬(wàn)州^涪陵^渝中^大渡口^江北^沙坪壩^九龍坡^南岸^北碚^萬(wàn)盛^雙撟^渝北^巴南^黔江^長(zhǎng)壽^綦江^潼南^銅梁^大足^榮昌^壁山^梁平^城口^豐都^墊江^武隆^忠縣^開縣^云陽(yáng)^奉節(jié)^巫山^巫溪^石柱^秀山^酉陽(yáng)^彭水^江津^合川^永川^南川*河北|石家莊^邯鄲^邢臺(tái)^保定^張家口^承德^廊坊^唐山^秦皇島^滄州^衡水*山西|太原^大同^陽(yáng)泉^長(zhǎng)治^晉城^朔州^呂梁^忻州^晉中^臨汾^運(yùn)城*內(nèi)蒙古|呼和浩特^包頭^烏海^赤峰^呼倫貝爾盟^阿拉善盟^哲里木盟^興安盟^烏蘭察布盟^錫林郭勒盟^巴彥淖爾盟^伊克昭盟*遼寧|沈陽(yáng)^大連^鞍山^撫順^本溪^丹東^錦州^營(yíng)口^阜新^遼陽(yáng)^盤錦^鐵嶺^朝陽(yáng)^葫蘆島*吉林|長(zhǎng)春^吉林^四平^遼源^通化^白山^松原^白城^延邊*黑龍江|哈爾濱^齊齊哈爾^牡丹江^佳木斯^大慶^綏化^鶴崗^雞西^黑河^雙鴨山^伊春^七臺(tái)河^大興安嶺*江蘇|南京^鎮(zhèn)江^蘇州^南通^揚(yáng)州^鹽城^徐州^連云港^常州^無(wú)錫^宿遷^泰州^淮安*浙江|杭州^寧波^溫州^嘉興^湖州^紹興^金華^衢州^舟山^臺(tái)州^麗水*安徽|合肥^蕪湖^蚌埠^馬鞍山^淮北^銅陵^安慶^黃山^滁州^宿州^池州^淮南^巢湖^阜陽(yáng)^六安^宣城^亳州*福建|福州^廈門^莆田^三明^泉州^漳州^南平^龍巖^寧德*江西|南昌市^景德鎮(zhèn)^九江^鷹潭^萍鄉(xiāng)^新馀^贛州^吉安^宜春^撫州^上饒*山東|濟(jì)南^青島^淄博^棗莊^東營(yíng)^煙臺(tái)^濰坊^濟(jì)寧^泰安^威海^日照^萊蕪^臨沂^德州^聊城^濱州^菏澤*河南|鄭州^開封^洛陽(yáng)^平頂山^安陽(yáng)^鶴壁^新鄉(xiāng)^焦作^濮陽(yáng)^許昌^漯河^三門峽^南陽(yáng)^商丘^信陽(yáng)^周口^駐馬店^濟(jì)源*湖北|武漢^宜昌^荊州^襄樊^黃石^荊門^黃岡^十堰^(guò)恩施^潛江^天門^仙桃^隨州^咸寧^孝感^鄂州*湖南|長(zhǎng)沙^常德^株洲^湘潭^衡陽(yáng)^岳陽(yáng)^邵陽(yáng)^益陽(yáng)^婁底^懷化^郴州^永州^湘西^張家界*廣東|廣州^深圳^珠海^汕頭^東莞^中山^佛山^韶關(guān)^江門^湛江^茂名^肇慶^惠州^梅州^汕尾^河源^陽(yáng)江^清遠(yuǎn)^潮州^揭陽(yáng)^云浮*廣西|南寧^柳州^桂林^梧州^北海^防城港^欽州^貴港^玉林^南寧地區(qū)^柳州地區(qū)^賀州^百色^河池*海南|海口^三亞*四川|成都^綿陽(yáng)^德陽(yáng)^自貢^攀枝花^廣元^內(nèi)江^樂(lè)山^南充^宜賓^廣安^達(dá)川^雅安^眉山^甘孜^涼山^瀘州*貴州|貴陽(yáng)^六盤水^遵義^安順^銅仁^黔西南^畢節(jié)^黔東南^黔南*云南|昆明^大理^曲靖^玉溪^昭通^楚雄^紅河^文山^思茅^西雙版納^保山^德宏^麗江^怒江^迪慶^臨滄*西藏|拉薩^日喀則^山南^林芝^昌都^阿里^那曲*陜西|西安^寶雞^咸陽(yáng)^銅川^渭南^延安^榆林^漢中^安康^商洛*甘肅|蘭州^嘉峪關(guān)^金昌^白銀^天水^酒泉^張掖^武威^定西^隴南^平?jīng)鯺慶陽(yáng)^臨夏^甘南*寧夏|銀川^石嘴山^吳忠^固原*青海|西寧^海東^海南^海北^黃南^玉樹^果洛^海西*新疆|烏魯木齊^石河子^克拉瑪依^伊犁^巴音郭勒^昌吉^克孜勒蘇柯爾克孜^博爾塔拉^吐魯番^哈密^喀什^和田^阿克蘇*香港|*澳門|*臺(tái)灣|臺(tái)北^高雄^臺(tái)中^臺(tái)南^屏東^南投^云林^新竹^彰化^苗栗^嘉義^花蓮^桃園^宜蘭^基隆^臺(tái)東^金門^馬祖^澎湖*其它|北美洲^南美洲^亞洲^非洲^歐洲^大洋洲"

    var?hwallselecttextarr
    hwallselecttextarr?
    =?hwallselecttext.split(TheSplit1)
    hwArraylength?
    =?hwallselecttextarr.length
    var?hwwhere?
    =?new?Array(hwArraylength);
    hwwhere[
    0]=?new?hw_comefrom("請(qǐng)選擇@","請(qǐng)選擇@");

    for?(var?hwl=0;hwl<hwArraylength;hwl++)
    {
    ????eval(hwwhere[hwl
    +1]?=?new?hw_comefrom(hwallselecttextarr[hwl].split(TheSplit2)[0],hwallselecttextarr[hwl].split(TheSplit2)[1]));
    }


    function?hw_comefrom(hwSelect_s1,hwSelect_s2)
    {
    ????
    this.hwSelect_s1?=?hwSelect_s1;
    ????
    this.hwSelect_s2?=?hwSelect_s2;
    }


    function?hw_select(boss,underling)
    {
    ????with(document.getElementsByName(boss)[
    0])
    ????
    {
    ????????var?hwSelect_s12?
    =?options[selectedIndex].value;
    ????}

    ????
    for(hwi?=?0;hwi?<?hwwhere.length;hwi?++)
    ????
    {
    ????????
    if?(hwwhere[hwi].hwSelect_s1.indexOf(TheSplit4)!=-1)
    ????????
    {
    ????????????var?hwThisV?
    =?hwwhere[hwi].hwSelect_s1.split(TheSplit4)[1]
    ????????}

    ????????
    else
    ????????
    {
    ????????????var?hwThisV?
    =?hwwhere[hwi].hwSelect_s1
    ????????}

    ????????
    if?(hwThisV?==?hwSelect_s12)
    ????????
    {
    ????????????hwSelect_s13?
    =?(hwwhere[hwi].hwSelect_s2).split(TheSplit3);
    ????????????
    for(hwj?=?0;hwj?<?hwSelect_s13.length;hwj++)
    ????????????
    {
    ????????????????with(document.getElementsByName(underling)[
    0])
    ????????????????
    {
    ????????????????????length?
    =?hwSelect_s13.length;
    ????????????????????
    if?(hwSelect_s13[hwj].indexOf(TheSplit4)!=-1)
    ????????????????????
    {
    ????????????????????????options[hwj].text?
    =?hwSelect_s13[hwj].split(TheSplit4)[0]
    ????????????????????????options[hwj].value?
    =?hwSelect_s13[hwj].split(TheSplit4)[1]
    ????????????????????}

    ????????????????????
    else
    ????????????????????
    {
    ????????????????????????options[hwj].text?
    =?hwSelect_s13[hwj];
    ????????????????????????options[hwj].value?
    =?hwSelect_s13[hwj];
    ????????????????????}

    ????????????????????var?hwSelect_s14
    =options[selectedIndex].value;
    ????????????????}

    ????????????}

    ????????
    break;
    ????????}

    ????}

    }

    function?hw_init(boss,underling,hwdefault_value)
    {
    ????alert(
    "初始化");
    ????with(document.getElementsByName(boss)[
    0])
    ????
    {
    ????????length?
    =?hwwhere.length;
    ????????var?hwm?
    =?0
    ????????
    for(hwk=0;hwk<hwwhere.length;hwk++)
    ????????
    {
    ????????????
    if?(hwwhere[hwk].hwSelect_s1.indexOf(TheSplit4)!=-1)
    ????????????
    {
    ????????????????options[hwk].text?
    =?hwwhere[hwk].hwSelect_s1.split(TheSplit4)[0];
    ????????????????options[hwk].value?
    =?hwwhere[hwk].hwSelect_s1.split(TheSplit4)[1];
    ????????????????
    if?(hwdefault_value.indexOf(hwwhere[hwk].hwSelect_s1.split(TheSplit4)[1])!=-1){hwm?=?hwk}
    ????????????}

    ????????????
    else
    ????????????
    {
    ????????????????options[hwk].text?
    =?hwwhere[hwk].hwSelect_s1;
    ????????????????options[hwk].value?
    =?hwwhere[hwk].hwSelect_s1;
    ????????????????
    if?(hwdefault_value.indexOf(hwwhere[hwk].hwSelect_s1)!=-1){hwm?=?hwk}
    ????????????}

    ????????}

    ????????selectedIndex?
    =?hwm
    ????}

    ????with(document.getElementsByName(underling)[
    0])
    ????
    {
    ????????var?hwn?
    =?0
    ????????hwSelect_s13?
    =?(hwwhere[hwm].hwSelect_s2).split(TheSplit3);
    ????????length?
    =?hwSelect_s13.length;
    ????????
    for(hwl=0;hwl<length;hwl++)
    ????????
    {
    ????????????
    if?(hwSelect_s13[hwl].indexOf(TheSplit4)!=-1)
    ????????????
    {
    ????????????????options[hwl].text?
    =?hwSelect_s13[hwl].split(TheSplit4)[0];
    ????????????????options[hwl].value?
    =?hwSelect_s13[hwl].split(TheSplit4)[1];
    ????????????????
    if?(hwdefault_value.indexOf(hwSelect_s13[hwl].split(TheSplit4)[1])!=-1){hwn?=?hwl}
    ????????????}

    ????????????
    else
    ????????????
    {
    ????????????????options[hwl].text?
    =?hwSelect_s13[hwl];
    ????????????????options[hwl].value?
    =?hwSelect_s13[hwl];
    ????????????????
    if?(hwdefault_value.indexOf(hwSelect_s13[hwl])!=-1){hwn?=?hwl}
    ????????????}

    ????????}

    ????????selectedIndex?
    =?hwn
    ????}

    }

    然后是調(diào)用的HTML頁(yè)面:

    ?

    <select?style="WIDTH:?60px"?name="province"?onchange?=?"hw_select('province','city')">
    </select>
    <select?style="WIDTH:?85px"?name="city"?onchange?=?"hw_select('province','city')">
    </select>
    <script?src="shengshi.js"?language="JavaScript"></script>
    <script>
    //初始化
    //
    "陜西西安"指默認(rèn)顯示的省,市。
    ?hw_init("province","city","陜西西安");
    </script>
    2.第二種就是兩個(gè)下拉列表的值分別存在兩張表中,或者是一張表中,他們有父子一對(duì)多的關(guān)系.具體實(shí)現(xiàn)思路是:在頁(yè)面首先讀取出第一個(gè)下拉列表的值,然后在它的onChange事件里提交表單到本頁(yè)面,然后再根據(jù)提交的第一個(gè)下拉的值去數(shù)據(jù)庫(kù)中查詢出第二個(gè)下拉列表的內(nèi)容顯示.

    ?????? 這種方法的好處是數(shù)據(jù)是動(dòng)態(tài)的,隨時(shí)可以更改數(shù)據(jù)庫(kù)數(shù)據(jù),比較靈活.但是它的缺點(diǎn)也是顯而易見的,那就是每次選擇第一個(gè)下拉都要提交表單,整個(gè)頁(yè)面都要刷新,用戶體驗(yàn)很差,性能也比較低.而且如果頁(yè)面上有很多其他用戶填寫的數(shù)據(jù),要保存這些數(shù)據(jù)相當(dāng)麻煩和煩瑣.

    ?????? 3.根據(jù)網(wǎng)友遙遠(yuǎn)的意見,在第二種的基礎(chǔ)上加進(jìn)iframe框架也是一個(gè)不錯(cuò)的選擇,也就是把兩個(gè)下拉放在一個(gè)iframe中,它同樣可以實(shí)現(xiàn)只刷新局部,也是一種不錯(cuò)的選擇.但是仍然存在一點(diǎn)缺陷就是刷新的時(shí)候會(huì)出現(xiàn)白屏閃過(guò).這是它比第四中弱的地方.

    ?????? 4.第四種就是我今天剛剛用AJAX實(shí)現(xiàn)的,在第二種的基礎(chǔ)上的改良,不用提交整個(gè)表單,按需取的相應(yīng)的數(shù)據(jù),局部刷新,用戶體驗(yàn)是和第一種JS實(shí)現(xiàn)的一樣.性能上比第二個(gè)要好很多,因?yàn)樗凰⑿滦枰倪叺牡胤?所以也沒有第二種要保留用戶數(shù)據(jù)的麻煩,有具有第二種的數(shù)據(jù)動(dòng)態(tài)和靈活性.是一種比較好的選擇.下面是一個(gè)簡(jiǎn)單的沒有連接數(shù)據(jù)庫(kù)的例子:

    ??????? 首先是第一個(gè)下拉框頁(yè)面代碼:

    <%@?page?contentType="text/html;?charset=GBK"?%>
    <html>
    <head>
    <title>
    下拉列表聯(lián)動(dòng)
    </title>
    </head>
    <body?bgcolor="#ffffff">
    <table>
    ??
    <tr>
    ????
    <td>
    ??????
    <select?name="s1"?onChange="haha()">
    ????
    <option?value="null">請(qǐng)選擇
    ??????
    <option?value="1">1
    ??????
    <option?value="2">2
    ??????
    <option?value="3">3
    ??????
    <option?value="4">4
    ??????
    </select>
    ????
    </td>
    ????
    <td?id="heihei">
    ??????
    <select>
    ??????????
    <option>請(qǐng)先選擇第一個(gè)下拉
    ??????
    </select>
    ????
    </td>
    ??
    </tr>
    </table>
    <script>
    ?
    //定義XMLHttpRequest對(duì)象
    ?var?http_request=false;

    ?
    function?send_request(url){
    ?????http_request
    =false;
    ?????
    //開始初始化XMLHttpRequest對(duì)象
    ?????if(window.XMLHttpRequest){//Mozilla等瀏覽器初始化XMLHttpRequest過(guò)程
    ?????????http_request=new?XMLHttpRequest();
    ?????????
    //有些版本的Mozilla瀏覽器處理服務(wù)器返回的未包含XML?mime-type頭部信息的內(nèi)容時(shí)會(huì)出錯(cuò).
    ?????????//因此,要確保返回的內(nèi)容包含text/xml信息.
    ?????????if(http_request.overrideMimeType){
    ?????????????http_request.overrideMimeType(
    "text/xml");
    ?????????}
    ?????}
    ?????
    else?if(window.ActiveXObject){//IE瀏覽器初始化XMLHttpRequest過(guò)程
    ?????????try{
    ?????????????http_request
    =new?ActiveXObject("Msxml2.XMLHTTP");
    ?????????}
    ?????????
    catch(e){
    ?????????????
    try{
    ?????????????????http_request
    =new?ActiveXObject("Microsoft.XMLHTTP");
    ?????????????}
    ?????????????
    catch(e){}
    ?????????}
    ?????}
    ?????
    //異常,創(chuàng)建對(duì)象失敗
    ?????if(!http_request){
    ?????????window.alert(
    "不能創(chuàng)建XMLHttpRequest對(duì)象實(shí)例!");
    ?????????
    return?false;
    ?????}
    ?????
    //指定響應(yīng)處理函數(shù)
    ?????http_request.onreadystatechange=processRequest;
    ?????
    //發(fā)送HTTP請(qǐng)求信息
    ?????http_request.open("GET",url,true);
    ?????http_request.send(
    null);
    ?}

    ?
    //處理返回信息函數(shù)
    ?function?processRequest(){
    ?????
    //判斷對(duì)象狀態(tài)
    ?????if(http_request.readyState==4){
    ?????????
    //判斷HTTP狀態(tài)碼
    ?????????if(http_request.status==200){
    ?????????????
    //信息已經(jīng)成功返回
    ?????????????//window.document.write(http_request.responseText);
    ????????????//alert(http_request.responseText);
    ????????????document.getElementById("heihei").innerHTML=http_request.responseText;
    ?????????}
    ?????????
    else?{
    ?????????????
    //請(qǐng)求頁(yè)面有問(wèn)題
    ?????????????alert("您所請(qǐng)求的頁(yè)面有異常!錯(cuò)誤狀態(tài):"+http_request.status);
    ?????????}
    ?????}
    ?}

    ?
    function?haha(){
    ?????
    var?flag=document.all("s1").value;
    ????send_request(
    "select.jsp?flag="+flag);
    ?}
    </script>
    </body>
    </html>

    ?然后是第二個(gè)下拉列表頁(yè)面代碼:

    <%@?page?contentType="text/html;?charset=GBK"?%>
    <%
    ??
    String?flag=request.getParameter("flag");
    ??
    if("1".equals(flag)){
    %>
    <select?name="s2">
    ??
    <option?value="a">a
    ??
    <option?value="b">b
    ??
    <option?value="c">c
    ??
    <option?value="d">d
    </select>
    <%
    ??}
    else?if("2".equals(flag)){
    %>
    <select?name="s2">
    ??
    <option?value="e">e
    ??
    <option?value="f">f
    ??
    <option?value="g">g
    ??
    <option?value="h">h
    </select>
    <%
    ??}
    else{
    %>
    <select?name="s2">
    ??
    <option?value="null">此項(xiàng)沒有內(nèi)容
    </select>
    <%
    ??}
    %>

  • Java Applet 入門 12 2001-07-24 morningbird
  • 用POST方式獲取Radio Button是否被選中的信息 2006-06-01 calories
  • 用JavaScript制作關(guān)聯(lián)下拉選擇框 2005-03-28 lphpc
  • 使用動(dòng)態(tài)JavaScript實(shí)現(xiàn)多級(jí)菜單聯(lián)動(dòng)時(shí)不刷新頁(yè)面的方法 2004-11-02 bookdog
  • 防止頁(yè)面刷新重復(fù)提交幾招 2005-09-22 jabby12
  • posted on 2006-11-24 16:20 蘆葦 閱讀(3496) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 亚洲欧美日韩久久精品| 亚洲6080yy久久无码产自国产 | 国产精品另类激情久久久免费| jzzjzz免费观看大片免费| 亚洲天堂一区在线| 亚洲成AV人片天堂网无码| 四虎影视精品永久免费| 亚洲一级毛片免费观看| 久久爰www免费人成| 高潮毛片无遮挡高清免费视频| 91亚洲精品自在在线观看| 亚洲日韩欧洲无码av夜夜摸| 精品国产免费观看一区| 男人的好免费观看在线视频| 久久大香香蕉国产免费网站| 国产成人无码精品久久久免费 | 国产亚洲精AA在线观看SEE | 一级黄色片免费观看| 色综合久久精品亚洲国产| 亚洲精品综合在线影院| 亚洲人成77777在线观看网| 亚洲福利视频网站| 亚洲欧洲另类春色校园小说| 亚洲六月丁香六月婷婷色伊人| 亚洲a一级免费视频| 亚洲国产日产无码精品| jizz在线免费观看| 99视频在线观看免费| 亚洲午夜成激人情在线影院| 亚洲综合色视频在线观看| 日韩在线a视频免费播放| 4399影视免费观看高清直播| 国产亚洲精品2021自在线| 亚洲AV成人无码久久精品老人 | 国产免费不卡视频| 精品香蕉在线观看免费| 日韩精品视频免费观看| 亚洲性日韩精品国产一区二区| 亚洲va久久久噜噜噜久久狠狠| 亚洲成a人片在线观看中文app| 亚洲av无码专区在线观看下载 |