十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
對(duì)于一個(gè)多條件的查詢,我們希望在選擇了一個(gè)菜單項(xiàng)后,另外一個(gè)下拉菜單能夠根據(jù)我們所選擇的第一個(gè)菜單項(xiàng)顯示其所有子菜單項(xiàng)。這就是本文提到的級(jí)聯(lián)菜單問(wèn)題。級(jí)聯(lián)菜單實(shí)現(xiàn)的方法有很多,本文根據(jù)筆者所做的一個(gè)小實(shí)驗(yàn),簡(jiǎn)單的介紹一下如何通過(guò)XML來(lái)實(shí)現(xiàn)級(jí)聯(lián)菜單的功能。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比瀘縣網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式瀘縣網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋瀘縣地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
首先要定義一個(gè)XML文件,用以存放級(jí)聯(lián)菜單的信息,我們命名為query.xml,其代碼如下:
?xml version="1.0" encoding="gb2312"?
info
course
text軟件工程/text
value1/value
/course
course
text數(shù)據(jù)結(jié)構(gòu)/text
value2/value
/course
course
text操作系統(tǒng)/text
value3/value
/course
course
text計(jì)算機(jī)組成原理/text
value4/value
/course
teacher
text張老師/text
value1/value
/teacher
teacher
text李老師/text
value2/value
/teacher
teacher
text劉老師/text
value3/value
/teacher
teacher
text王老師/text
value4/value
/teacher
class
text一班/text
value1/value
/class
class
text二班/text
value2/value
/class
class
text三班/text
value3/value
/class
class
text四班/text
value4/value
/class
/info
然后再創(chuàng)建一個(gè)HTML文件,命名為query.html
在query.html里,首先創(chuàng)建一個(gè)表單
form id="queryForm"
select id="keyword" name="keyword" onChange="showDetail()"
option value="default"default/option
option value="1"課程/option
option value="2"教師/option
option value="3"班級(jí)/option
/select
select id="content" name="content" onChange="showValue()"
option value="default"default/option
/select
/form
從上面的代碼可以看出,當(dāng)我們選擇第一級(jí)菜單時(shí),會(huì)觸發(fā)showDetail方法,這是通過(guò)JavaScript來(lái)實(shí)現(xiàn)的,因此我們還需要定義一個(gè)showDetail方法,其實(shí)現(xiàn)代碼如下:
function showDetail(){
var document_xml = new ActiveXObject("Microsoft.XMLDOM");
document_xml.load("query.xml"); //加載info.xml
var RootNode = document_xml.documentElement; //獲得info.xml文檔的根節(jié)點(diǎn)
var keyword = document.getElementByIdx("keyword").value;
var details; //用以存放二級(jí)菜單內(nèi)容,是一個(gè)數(shù)組對(duì)象
var content = document.getElementByIdx("content");
content.options.length = 0;//先清空
if(keyword=="default"){
var option = new Option("default","default");
content.add(option);
}else{
if(keyword=="1"){
details = document_xml.getElementsByTagName_r("course");
}else if(keyword=="2"){
details = document_xml.getElementsByTagName_r("teacher");
}else if(keyword=="3"){
details = document_xml.getElementsByTagName_r("class");
}
for(var i=0;idetails.length;i++){
var xText = details[i].childNodes[0].firstChild.nodeValue; //獲取文本
var xValue = details[i].childNodes[1].firstChild.nodeValue; //獲取文本以應(yīng)的值
var option = new Option(xText,xValue);
content.add(option);
}
}
}
從上面的代碼可以看出,showDetail方法會(huì)根據(jù)一級(jí)菜單選項(xiàng)的不同顯示對(duì)應(yīng)的子菜單。這里涉及到通過(guò)JavaScript來(lái)讀取xml文件的操作,可以參見(jiàn)源碼的注釋部分,記得結(jié)合xml文件里的內(nèi)容一起看哦。
二級(jí)菜單顯示出來(lái)之后,我們就可以進(jìn)行選擇了,選擇之后,會(huì)調(diào)用showValue方法,把選到的子菜單項(xiàng)的value和text顯示出來(lái)。showValue的定義如下:
function showValue(){
var content= document.getElementByIdx("content");
var contentText = content.options[content.selectedIndex].text; //獲取text值
var contentValue = document.getElementByIdx("content").value; //獲取文本
alert(contentValue+" "+contentText);
}
在這個(gè)方法里,要注意option當(dāng)中text值的獲取,它與select表單域的value的獲取方式不大一樣,詳見(jiàn)代碼及其注釋。
把兩個(gè)方法封裝在head/head之間,記得要寫上script language="javascript"和/script了,然后你直接打開(kāi)query.xml就可以看到效果了。
不知是否對(duì)樓主有用,希望對(duì)樓主有所幫助。
按你這程序可以在上級(jí)菜單判斷返回值是否能整除10(也就是是否以0結(jié)尾),如果是,則上級(jí)菜單把上級(jí)命令代碼末尾賦成0(也就是本級(jí)返回110,上級(jí)返回10),依次類推,在最頂級(jí)菜單里面接收到0直接break跳出循環(huán)。
這樣是級(jí)聯(lián)的退出,還有種比較簡(jiǎn)便的辦法就是System.exit(0)直接終止程序。
如果只想跳上一級(jí),可以返回-1之類的數(shù)字,讓上一級(jí)菜單判斷一下continue(或者什么都不做也行),把菜單刷一遍就行了。
1,所謂級(jí)聯(lián)下拉菜單就是動(dòng)態(tài)的下拉菜單,
當(dāng)?shù)谝患?jí)選中某一個(gè)選項(xiàng)是,
第二級(jí)會(huì)跟著第一級(jí)的變化而變化,
比如:當(dāng)“學(xué)院”這一欄選擇“信息學(xué)院”那么“專業(yè)”這一欄只會(huì)出現(xiàn)屬于信息學(xué)院的專業(yè)。
2,級(jí)聯(lián)下拉菜單的實(shí)現(xiàn)是運(yùn)用itemStateChanged(ItemEvent )方法實(shí)現(xiàn),首先在下拉菜單上注冊(cè)ItemListener監(jiān)視器,當(dāng)下拉菜單選中時(shí)觸發(fā)itemStateChanged(ItemEvent )事件重新給下一級(jí)下拉菜單賦值。
public void itemStateChanged(ItemEvent e) {
if(e.getSource() == xueyuan) { // 當(dāng)點(diǎn)擊學(xué)院下拉框時(shí)
try {
Statement stat2 = con.createStatement();
String sql = "select D_ID from xueyuanin WHERE
D_NAME='"+e.getItem()+"'"; // 獲取該學(xué)院的代號(hào)
ResultSet rs = stat2.executeQuery(sql);
rs.next();
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyMenu extends JFrame{
JMenuBar jmbar=new JMenuBar();
JMenu jmenu=new JMenu("顏色");
JMenuItem jmt1=new JMenuItem("紅色"),
jmt2=new JMenuItem("黃色"),
jmt3=new JMenuItem("藍(lán)色");
JPanel jp=new JPanel();
MyMenu(){
setTitle("菜單測(cè)試");
setSize(400,300);
setJMenuBar(jmbar);
jmbar.add(jmenu);
jmenu.add(jmt1);
jmenu.add(jmt2);
jmenu.add(jmt3);
add(jp);
jmt1.addActionListener(new MenuAction(this));
jmt2.addActionListener(new MenuAction(this));
jmt3.addActionListener(new MenuAction(this));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new MyMenu();
}
}
class MenuAction implements ActionListener{
MyMenu m;
MenuAction(MyMenu m){
this.m=m;
}
public void actionPerformed(ActionEvent e){
String color=e.getActionCommand();
if(color=="紅色")m.jp.setBackground(Color.red);
else if(color=="黃色")m.jp.setBackground(Color.yellow);
else if(color=="藍(lán)色")m.jp.setBackground(Color.blue);
}
}
不知道你要什么事件代碼,我寫了個(gè)比較簡(jiǎn)單的你看適合不。