中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > web關(guān)聯(lián)菜單實(shí)現(xiàn)方法
基于Ajax的應(yīng)用程序架構(gòu)匯總 回到列表 NoahWeb應(yīng)用———字符資源
 web關(guān)聯(lián)菜單實(shí)現(xiàn)方法

作者:chainengjie 時間: 2005-08-27 文檔類型:原創(chuàng) 來自:藍(lán)色理想

第 1 頁 web關(guān)聯(lián)菜單實(shí)現(xiàn)方法 [1]
第 2 頁 web關(guān)聯(lián)菜單實(shí)現(xiàn)方法 [2]

四、編寫JavaScript代碼,控制菜單的顯示

其實(shí)有經(jīng)驗(yàn)的程序員,讀到這里應(yīng)該知道如何進(jìn)行下去。但您不妨讀下去,也許,筆者的方法對您未必不是一種新的嘗試。而且,據(jù)我猜測,讀我這篇文章的大多數(shù)都是沒有經(jīng)驗(yàn)的程序員,呵呵,幫人幫到底吧。Come On, Let's Go.
讓菜單顯示出來,其實(shí)有好幾種思路。利用ASP等程序直接生成<SELECT>結(jié)構(gòu)、利用OPTION對象的ADD和Remove方法動態(tài)添加和改變等等,都是可以使用的方法。但,經(jīng)過筆者的多次實(shí)踐和摸索,有一種方法更為有效,那就是利用Script代碼動態(tài)的改寫整個<SELECT>框架。

好,就讓我們從加載頁面(document)開始,一步一步的講解JavaScript代碼到底是如何控制菜單的顯示的。

既然有三個菜單,那么我們就得事先設(shè)計(jì)出這樣的HTML代碼(其實(shí)要不要無所謂,放在那里只是為了便于理解):

<BODY BGCOLOR="#FFFFFF" ONLOAD="body_onload()">
...
<TD>
<SELECT NAME="s0" ONCHANGE="SetSubmenu(this)"></SELECT>
</TD>
<TD>
<SELECT NAME="s1" ONCHANGE="SetSubmenu(this)"></SELECT>
</TD>
<TD>
<SELECT NAME="s2" ONCHANGE="SetSubmenu(this)"></SELECT>
</TD>
</BODY>

您有可能要問,這里怎么什么數(shù)據(jù)都沒有?不要奇怪,等一下您自然就會明白。我們來看一下<BODY>對象的ONLOAD事件body_onload()做了些什么工作?

function body_onload(){
var TD = GetParent(document.all("s0"), "TD");
TD.innerHTML = MakeMenu(arrUnit, 0, 0, "s0", 1);
TD = GetParent(document.all("s1"), "TD");
TD.innerHTML = MakeMenu(arrDept, GetSelectValue(document.all("s0")), 0, "s1", 1);
TD = GetParent(document.all("s2"), "TD");
TD.innerHTML = MakeMenu(arrEmp, GetSelectValue(document.all("s1")), 0, "s2", 1);
}

讓我們來研究一下。首先程序利用GetParent()函數(shù)取得s0的容器TD對象句柄,然后,利用MakMenu()函數(shù)產(chǎn)生菜單代碼,并把代碼賦值給剛才取得的TD對象;然后是s1,接著是s2.。GetParent()函數(shù)定義如下:
function GetParent(src, tag){
if (src && src.tagName!=tag){
return(GetParent(src.parentElement, tag));
}
return src;
}
這里的tag參數(shù)必須大寫,例如TD、TR、TABLE,函數(shù)返回的是離src指定的元素最近的由tag標(biāo)簽定義的父對象。
我們要特別說明一下MakeMenu()函數(shù),這個函數(shù)的作用不言而喻--產(chǎn)生菜單的HTML定義,先看看函數(shù)定義:

function MakeMenu(arrSub, pValue, cValue, name, bulSkip){
var sHTML = "<select name='" + name + "' onchange='SetSubMenu(this)' >";
if (bulSkip) sHTML += "<option value=0><未選擇></option>";
for (var i=0; i < arrSub.length; i++){
if (arrSub[i][0]==pValue){
var tag = (arrSub[i][1]==cValue)?" selected>":">";
sHTML += "<option value='" + arrSub[i][1] + "'" + tag + arrSub[i][2] + "</option>";
}
}
sHTML += "</select>";
return sHTML;
}

代碼拷貝框

[Ctrl+A 全部選擇 然后拷貝]

來看一下參數(shù)的含義。arrSub,指的是菜單數(shù)據(jù)的來源,其實(shí)就是我們上文定義的數(shù)組;pValue,指定父結(jié)點(diǎn)的編號,根據(jù)這個編號,我們可以找出所有的子結(jié)點(diǎn)數(shù)據(jù);cValue,指定菜單的默認(rèn)顯示項(xiàng);name,指定產(chǎn)生的<SELECT>菜單的名稱;bulSkip,指定菜單的默認(rèn)顯示項(xiàng)是"<未選擇>"還是具體數(shù)據(jù)。

GetSelectValue()函數(shù)的目的,就是取得<SELECT>對象當(dāng)前顯示的值。如果沒有顯示任何值,函數(shù)返回0。

function GetSelectValue(oSelect){
if (oSelect.selectedIndex < 0) return 0;
return oSelect.options(oSelect.selectedIndex).value;
}

那么,當(dāng)用戶加載頁面之后,首先運(yùn)行的就是body_onload()函數(shù),該函數(shù)根據(jù)已經(jīng)產(chǎn)生的JavaScript多維數(shù)組,利用MakeMenu()函數(shù)動態(tài)的生成菜單的HTML代碼,并根據(jù)DHTML的原理加載到頁面中。OK,運(yùn)行一下頁面,看看菜單是否正常顯示?如果有什么問題,抓緊時間好好調(diào)試一下,例如數(shù)據(jù)庫的連接是否正常,javascript代碼的大小寫是否正確,數(shù)組的定義是否有什么問題…

下一步,選擇菜單…等一下,好像還有什么遺漏,對了,我們還必須為<SELECT>對象的onchange事件添加程序代碼:

function SetSubMenu(pSelect){
var oOption, sValue;
if (pSelect.selectedIndex < 0) return;
switch (pSelect.name){
case "s0":
var TD = GetParent(document.all("s1"), "TD");
TD.innerHTML = MakeMenu(arrDept, GetSelectValue("s0"), "0", "s1", 0);
TD = GetParent(document.all("s2"), "TD");
TD.innerHTML = MakeMenu(arrEmp, GetSelectValue("s1"), "0", "s2", 0);
break;
case "s1":
var TD = GetParent(document.all("s2"), "TD");
TD.innerHTML = MakeMenu(arrEmp, GetSelectValue("s1"), "0", "s2", 0);
break;
default:
}
}

好了,我們再檢查一下,還有沒有什么遺漏。從第一個下拉菜單中選擇單位,立即,第二個下拉菜單和第三個下拉菜單都發(fā)生了變化,看看是不是想要的。(不是?呵呵,回頭好好檢查);再在第二個下拉菜單中選擇部門,看看員工的下拉菜單是否跟著改變?
恭喜你,你已經(jīng)成功的實(shí)現(xiàn)了三維下拉菜單。其實(shí),對于二維菜單,實(shí)現(xiàn)的方法完全一致。讀者完全可以利用本文的方法實(shí)現(xiàn)WEB項(xiàng)目菜單的全攻略。以后再遇到類似的問題,我想這回你一定可以毫不猶豫的說,讓我來搞定它。

出處:藍(lán)色理想
責(zé)任編輯:moby

上一頁 web關(guān)聯(lián)菜單實(shí)現(xiàn)方法 [1] 下一頁

◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
[asp]怎么添加驗(yàn)證碼的解決方法
開發(fā)ASP組件引用asp內(nèi)置對象方法
手機(jī)GUI二級菜單設(shè)計(jì)說明
用Popup窗口建無限級Web頁菜單
[ASP]利用 xmlhttp 分塊上傳文件
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國際體驗(yàn)設(shè)計(jì)大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:2/21個記錄/頁 轉(zhuǎn)到 頁 共2個記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2