Ajax 板


LINE

這是我修改過的原始碼 <select name="region" id="region" > <option value="0">---請選擇地點---</option> <option value="國內">台灣本島</option> <option value="國外">國外</option> </select> <select name="place" id="place"> <option value="0">----請選擇----</option> </select> <span id="place_other"></span></div> <script language="JavaScript" type="text/javascript"> //函數:在 IE 中建立 XMLHttpRequest 物件,避免不同瀏覽器的差異性 if (typeof XMLHttpRequest == "undefined" && window.ActiveXObject) { function XMLHttpRequest() { var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i=0; i < arrSignatures.length; i++) { try { var oRequest = new ActiveXObject(arrSignatures[i]); return oRequest; } catch (oError) { //ignore } } throw new Error("MSXML is not installed on your system."); } } //函數:將參數加入到 URL 尾端,以便讓 GET 使用 function addURLParam(sURL, sParamName, sParamValue) { sURL += (sURL.indexOf("?") == -1 ? "?" : "&"); sURL += encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue); return sURL; } //----------------------------------------------------------------------- // //分別取得兩個選單 的reference var oRegionList = document.getElementById('region'); var oPlaceList = document.getElementById('place'); //後端傳回 JSON 資料的路徑 var sURLInit = "place.php"; //用來儲存 JSON 的全域變數 var json; //一開始時先將第二個選單停用 oPlaceList.disabled = true; //第一個選單的 onchange 事件,用來產生第二個選單的內容 oRegionList.onchange = function() { //如果選擇的是第一個選項,第二個選單只顯示"請選擇",並且無法使用。 if(this.selectedIndex == 0) { oPlaceList.options.length = 0; oPlaceList.options[0] = new Option("----請選擇----",0); oPlaceList.disabled = true; document.getElementById('place_other').innerHTML=' '; } else { //如果有選擇其他選項,送出 Ajax 跟後端要求第二個選單的資料。 //產生要求資料的 url,加入第一個選單所選擇的選項值作為參數 sURL = addURLParam(sURLInit,"id",this.options[this.selectedIndex].value); //建立 XMLHttpRequest 物件,並且送要求 var oRequest = new XMLHttpRequest(); oRequest.open("get", sURL, true); //接收資料的 callback 函數 oRequest.onreadystatechange = function() { if(oRequest.readyState == 4) { //接收到資料後,就將第一個選單啟用 oRegionList.disabled = false; if(oRequest.status == 200 ){ //接受資料成功,可以從 oRequest.responseText 取得傳回的資料 //轉換為 JSON 的格式 json = "json=" + oRequest.responseText; json = eval(json); //產生第二個選單的選項 for(var i=0,j=json.length;i<j;i++) { oPlaceList.options[i] = new Option(json[i].text,json[i].value); } //將第二個選單啟用 oPlaceList.disabled = false; } else { //接收資料失敗,可以從 oRequest.statusText 取得錯誤狀態資訊 //將錯誤資訊顯示在第二個選單中 oPlaceList.options[0] = new Option(oRequest.statusText,0); } } } //選擇選項後先將第一個選單停用,避免重複送出要求 oRegionList.disabled = true; //送出 Ajax 要求 oRequest.send(null); } } 如果有些看不到 請參考前幾篇裡提供的網址,從中可以下載原本的原始檔 ※ 引述《TonyQ (骨頭)》之銘言: : ※ 引述《qazsd (nice play!)》之銘言: : : 我將 : : if(this.selectedIndex == 0) { : : oPlaceList.options.length = 0; : : oPlaceList.options[0] = new Option("----請選擇----",0); : : oPlaceList.disabled = true; : : 底下加了這行就OK了 : : document.getElementById('place_other').innerHTML=' '; : : 不過現在還有一個小問題就是... : : 當第一個選單是選第二個選項時,緊接著再選第一個選項 : : 那麼第二個選單就會有兩個"其他" (這不是繞口令) : 因為你沒把第一個選項的onchange提供上來 : 而且我不太確定你的"其他"是指 : 下拉式選單<select>的還是指純文字選項 : 所以能給的訊息還是很少 XD : 總之你再更動第一個選項的時候 : 第二個選單的重置好像做的不太乾淨 所以才會多新增了一個"其他" : 簡而言之,先找出會產生"其他"的地方,再來避免多重產生。:) : 應該只是邏輯上的問題,多找找囉。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.20.190







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP