ASP与数据库,有用的代码(转贴,摘贴)

  ASP与数据库

  ASP与数据库运用:密码验证

        Microsoft 的大作ASP(Active Server

      Pages)以其易学易用、扩充性好、功能多而强等优点正掀起一场新的web编程革命(从严格意义上讲,编写asp并不是编程),它以令人吃惊的发展和普及速度大有取代由perl等语言编写的CGI(Common

      Gateway Interface,通用网关接口) 的势头。基于web

      page方式的web管理模式已经成为潮流,看看现在的网管们,有谁不会asp的编写呢?要管理?那你可能就要用到我这里要说的“密码验证”了。简单地说,密码验证就是首先判断你是不是有登录权限,如果有,就继续,否则,哼哼……。什么?你到现在还不知道ASP是什么东东?“该程序执行了非法操作,即将被关闭。如仍有问题,请与程序供应商联系。”----------系统语

        下面,我们就来看看实现密码验证的ASP需要些什么吧。

        一、 ASP运行环境:

        Windows 95/98单机平台:PWS (Personal Web Server)4.0 、windows NT

      4.0/5.0服务器平台:IIS(Internet Information Server )Service Pack 3 及其以上版本)

        NT workstation 4.0 工作站平台:PWS(Personal Web Server )NT

      workstation版及最新版的IE浏览器。

        二、 用于制作ASP的软件

        Windows FrontPage 98/2000 、Dreamweaver 3.0 ,如果这些软件你都没有,那你就用windows

      中的Notepad

      当一次“代码编写狂”吧。不过ASP中很多代码仍是需要我们手工编写大量代码的,用专用的网页制作软件只不过是偷一丁点懒而已。

        三、 用哪一种数据库作为储存用户资料(用户名及密码)的数据库呢?

        SQL Server、Microsoft Access

      97/2000等都可以。本人建议你使用Access,因为你可能对它比较熟悉,一旦有问题,解决起来比较容易,更深的原因是:Microsoft

      Access相对于其它非服务器等级的数据库执行的效率要高得多。

        好了,废话说了这么多,可能你早已经不耐烦了。不过,这对于一些ASP的初学者可能还是有帮助的,对于这部分读者,你们可能还得要看看关于ASP方面的书籍或网站来增加你对ASP基本语法的了解。

        让我们一步一步来做这个密码验证吧,我采用的是Windows 98 + PWS 4.0平台,IE

      5.0浏览器,网页制作软件:FrontPage 2000. Go!

        一、创建用户密码数据库

        先用Access建立一个用户密码数据库,建立字段名id和psd,并添加值.如:id的值我设为:admin,psd的值为:www,当然,你还可以继续添加用户id及psd,完成后保存为:psd.mdb。

        二、编写psd.asp(用户登录界面页,完成验证的功臣就是它了)及log.asp(成功登录后显示的页面)。在编写之前,我们来分析一下常见的用户登录界面,比如说你想收取基于web

      page方式免费邮件箱的登录界面:管理用户登录的文件名常常为log.*,开始登录时是这个文件,登录完成后浏览器的地址栏中还是显示的这个文件名,这是怎么回事儿呢?用ASP的方法来讲,原来,用户登录的文件被包含在登录完成后的文件中。以我现在要讲的这个例子来说,psd.asp就是被包含在log.asp中了。用户登录时看到的文件名将是:log.asp,而log.asp要求系统先执行psd.asp,通过验证之后才看到真正的log.asp网页。对了!实际上密码验证的关键在psd.asp。在你读完本文后,你会深深体会这一点。既然psd.asp文件是关键,那我们就先来看看psd.asp是怎么写的。

        运行FrontPage新建一个文件,并保存为:psd.asp(在FrontPage 的保存类型中选取“Active Server

      Pages”)。在FrontPage

      左下角选取“HTML”先在它的顶部进行ASP源代码的编写,内容如下(以下源代码中凡出现“‘……”的均为注释):

        <%

        function checkPwd(id,psd) '检测用户id及密码

        dim conn,param,rs

        set conn=server.createobject("adodb.connection") '创建数据库连接对象conn

        param="driver={microsoft access driver (*.mdb)}"

      ‘指定数据库驱动程序,不可省略写为“access diver(*.mdb)”

        conn.open param & ";dbq=" & server.mappath("psd.mdb")

      '用指定的数据库驱动程序打开数据库,并指定数据路径

        sql="select*from psd where id='" & id & "' and psd='" & psd & "'"

      ‘定义sql从数据库中读取id及psd的值,本行中的第一个psd是指数据库名,以后的psd是指psd.mdb中的psd字段。

        set rs=conn.execute(sql) '打开数据库

        if rs.eof then

        checkpwd=false

        else

        checkpwd=true

        end if

        end function

      ‘以上几句判断是否已经读完数据库中的记录,如果没有,就向后读,如果已经完成,则验证用户名及密码。如果验证通过,则为true,反之为flase

        %>

        <%

        if isEmpty(session("passed")) then session("passed")=false

      '判断用户输入信息

        id=request("id") ‘获取用户id(用户名)

        psd=request("psd") ‘获取用户psd(密码)

        if id="" or psd="" then

        response.write"请输入您的登录名及密码。" '如果用户没有输入完整的信息,返回出错信息。

        elseif not checkpwd(id,psd) then

        response.write"用户名或密码错误!<br>请检查你的用户名及密码然后再试一次!"

      ‘如果用户已经输入完整信息,但输入错误也返回出错信息。

        else session("passed")=true

        end if

        if not session("passed") then%>

      ‘用户输入的信息完全正确并验证通过,以下开始编写html代码,做一个用户登录界面。

        <html>

        <head>

        <meta http-equiv="Content-Type" content="text/html;

      charset=gb2312">

        <title>请您输入您的用户名及密码!</title>

        </head>

        <body bgcolor="#000000" text="#FFFFFF">

        <p align="center"> 

        <p align="center"> </p>

        <p align="center"><b><font face="黑体"

      size="6">用户登录首页</font></b></p>

        <p align="center"> </p>

        <form method="POST"

      action="<%=request.serverVariables("psd.mdb")%>">

        <table border="0" width="100%" cellspacing="0" cellpadding="0">

        <tr>

        <td width="41%" align="right">用户名:</td>

        <td width="59%"><input type="text" name="id" size="20"

      value="<%=id%>"></td>

        </tr>

        <tr>

        <td width="41%" align="right"> 密 码:</td>

        <td width="59%"><input type="password" name="psd" size="20"

      value="<%=psd%>"></td>

        </tr>

        <tr>

        <td width="41%"> </td>

        <td width="59%"> </td>

        </tr>

        </table>

        <p align="center"><input type="submit" value="提交" name="B1"><input

      type="reset" value="清除" name="B1"></p>

        </form>

        <%response.end

        end if %> ‘验证过程结束,进入加密网页。

        </body>

        </html>

        完成了psd.asp的编写,可能你早已经迫不及待地想知道log.asp怎么编写了吧。让我们继续吧!

        Log.asp的内容:

        <!--#include file="psd.asp"-->

      ‘在log.asp源代码中的顶部输入这句,作用就是在系统执行log.asp之前先执行psd.asp啦!

        <html>

        <head>

        <title>用户验证通过,您已经成功登录系统</title>

        </head>

        <body><center><p><p><p><p>用户验证通过,您已经成功登录!<br>

        现在你可以进行你想要的操作了。如果你有什么问题,请来信Email<a

      href="mailto:[email protected]?subject=问你几个关于密码验证的问题">[email protected]</a></center>

        </body>

        </html>

        呵呵……手写了这么多,还受得了吧。你在编写完成之后,可以移植到其它平台上,比如Windows

      NT。最后,将你做的这两个asp文件及psd.mdb数据库放在同一个目录下(该目录必须在PWS或IIS中有www服务),比如:c:\inetpub\wwwroot\。然后,在确保你的PWS或IIS在运行的情况下,在你们IE浏览器的地址栏中输入http://127.0.0.1/log.asp,看看,会有什么!(如果你在登录过程中听到你的硬盘在响,可别吓着了哟!)

  q 文 章 点 评       3 篇

  >>上篇文章:ASP技术访问WEB数据库

  >>下篇文章:制作有管理功能的ASP留言板

  第三招:控制你的弹出窗口只弹出一次(如果每进一次,刷新一次就弹出你不觉得很烦和麻烦吗?)有什么好的办法吗?

  那是当然的啊,我们现在只要使用cookie来控制就能实现这样的要求了。

  首先,你需把将如下代码加入到页面HTML的<HEAD>和</HEAD>之间:

  <script>

  .function openwin(){

  .window.open("pop1.html","","width=120,height=240")

  .}

  .function get_cookie(Name) {

  .var search = Name + "="

  .var returnvalue = "";

  .if (document.cookie.length > 0) {

  .offset = document.cookie.indexOf(search)

  .if (offset != -1) {

  .offset += search.length

  .end = document.cookie.indexOf(";", offset);

  .if (end == -1)

  .end = document.cookie.length;

  .returnvalue=unescape(document.cookie.substring(offset, end))

  . }

  . }

  .return returnvalue;

  . }

  .function loadpopup(){ //*控制弹出窗口的函数哟,你要使用他的啊

  .if (get_cookie('popped')==''){

  .openwin()

  .document.cookie="popped=yes"

  . }

  .}

  .//-->

  </script>

   然后,用<body onload="loadpopup()">替换页面中原来的<BODY>这一句就行的了。

  》》》》》》》》》》》》》》》》》》》》》》----------------------------------

  在提交帖之后:

  <%

  if Response.Cookies("time")<>"" then

  if DateDiff('s',Response.Cookies("time"),now())<20   '隔20s才能再发帖

  Response.Write "<script>alert('不能频繁发帖');window.location=history.go(-1)</script>"

  response.End

  end if

  end if

  Response.Cookies("time")=now()

  ……             '将帖子入库

  ----------------------------------------------------------

  ASP项目中的公共翻页模块:

  在大型的ASP项目中,很多的页面都涉及到翻页功能。如果每个页面都写一个翻页的程序的话,这样的工作即降低了工作效率,也不利于工程的模块化,不能使代码重用。因此,把翻页这样的功能模块化是很有必要的。

  设计方法:

  1、调用该模块时,只需要传递记录集和每页显示的记录的条数;

  2、可以点击链接进行翻页,也可以直接输入页码,回车后翻页;

  3、不要考虑文件名,程序的每次翻页都能在当前页面。

  想清楚了上面3个问题,我们的公共翻页模块就可以动手了。

  <%

  '+++++++++++++++++++++++++++++++++++++

  '◆模块名称: 公共翻页模块

  '◆文 件 名: TurnPage.asp

  '◆传入参数: Rs_tmp (记录集), PageSize (每页显示的记录条数)

  '◆输 出: 记录集翻页显示功能

  '+++++++++++++++++++++++++++++++++++++

  '

  Sub TurnPage(ByRef Rs_tmp,PageSize) 'Rs_tmp 记录集  PageSize 每页显示的记录条数;

  Dim TotalPage '总页数

  Dim PageNo '当前显示的是第几页

  Dim RecordCount '总记录条数

  Rs_tmp.PageSize = PageSize

  RecordCount = Rs_tmp.RecordCount

  TotalPage = INT(RecordCount / PageSize * -1)*-1

  PageNo = Request.QueryString ("PageNo")

  '直接输入页数跳转;

  If Request.Form("PageNo")<>"" Then PageNo = Request.Form("PageNo")

  '如果没有选择第几页,则默认显示第一页;

  If PageNo = "" then PageNo = 1

  If RecordCount <> 0 then

  Rs_tmp.AbsolutePage = PageNo

  End If

  '获取当前文件名,使得每次翻页都在当前页面进行;

  Dim fileName,postion

  fileName = Request.ServerVariables("script_name")

  postion = InstrRev(fileName,"/")+1

  '取得当前的文件名称,使翻页的链接指向当前文件;

  fileName = Mid(fileName,postion)

  %>

  <table border=0 width='100%'>

  <tr>

  <td align=left> 总页数:<font color=#ff3333><%=TotalPage%></font>页

  当前第<font color=#ff3333><%=PageNo%></font>页</td>

  <td align="right">

  <%If RecordCount = 0 or TotalPage = 1 Then

  Response.Write "首页|前页|后页|末页"

  Else%>

  <a href="<%=fileName%>?PageNo=1">首页|</a>

  <%If PageNo - 1 = 0 Then

  Response.Write "前页|"

  Else%>

  <a href="<%=fileName%>?PageNo=<%=PageNo-1%>">前页|</a>

  <%End If

  If PageNo+1 > TotalPage Then

  Response.Write "后页|"

  Else%>

  <a href="<%=fileName%>?PageNo=<%=PageNo+1%>">后页|</a>

  <%End If%>

  <a href="<%=fileName%>?PageNo=<%=TotalPage%>">末页</a>

  <%End If%></td>

  <td width=95>转到第

  <%If TotalPage = 1 Then%>

  <input type=text name=PageNo size=3 readonly disabled style="background:#d3d3d3">

  <%Else%>

  <input type=text name=PageNo size=3 value="" title=请输入页号,然后回车>

  <%End If%>页

  </td>

  </tr>

  </table>

  <%End Sub%>

  当然,大家可以把翻页的链接做成图片按钮,这样的话也面就更加美观了。

  调用方法:

  1、在程序开始或要使用翻页的地方包含翻页模块文件;

  2、定义变量:RowCount,每页显示的记录条数

  3、调用翻页过程:Call TurnPage(记录集,RowCount)

  4、在Do While 循环输出记录集的条件中加上" RowCount > 0 " 条件

  5、在循环结束 "Loop前" 加上: RowCount = RowCount - 1

  '-----------------------------------------------------

  调用范例:

  文件名:News.asp

  <%

  Dim Conn,Rs_News

  Set Conn = server.CreateObject("ADODB.CONNECTION")

  Conn.Open "cpm","cpm","cpm"

  Dim Sql

  Sql = "Select * from News"

  Set Rs_News = Server.CreateObject("ADODB.RECORDSET")

  Rs_News.Open Sql,Conn,1,3 '获取的记录集

  '公共翻页模块开始%>

  <!--#include file=../Public/TurnPage.asp-->

  <%

  Dim RowCount

  RowCount = 10 '每页显示的记录条数

  Call TurnPage(Rs_News,RowCount)

  '公共翻页模块结束%>

  <table width=100%>

  <tr>

  <td>新闻编号</td>

  <td>新闻标题</td>

  <td>发布日期</td>

  <tr>

  <%

  If Not Rs_News.eof

  Do while Not Rs_News.eof and RowCount>0

  %>

  <tr>

  <td><%=Rs_News("ID")%></td>

  <td><%=Rs_News("Name")%></td>

  <td><%=Rs_News("Date")%></td>

  <tr>

  <%

  RowCount = RowCount - 1

  Rs_News.MoveNext

  Loop

  End If

  %>

  (出处:www.dev-club.com)

  --------------------------------------------------------------------

  在提交帖之后:

  <%

  if Response.Cookies("time")<>"" then

  if DateDiff('s',Response.Cookies("time"),now())<20   '隔20s才能再发帖

  Response.Write "<script>alert('不能频繁发帖');window.location=history.go(-1)</script>"

  response.End

  end if

  end if

  Response.Cookies("time")=now()

  ……             '将帖子入库

  ---------------------------------

  怎样去除执行window.close()后弹出的‘是否关闭窗口'对话框

  self.opener=null;

  self.close();

  但是只能在IE5.5  或IE6.0上用

  最小化、最大化、关闭窗口

  <object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">

  <param name="Command" value="Minimize"></object>

  <object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">

  <param name="Command" value="Maximize"></object>

  <OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">

  <PARAM NAME="Command" value="Close"></OBJECT>

  -------------------------------------------------------

  我的下拉框中又两个选项,当选择第一个时,出现一个用户输入页面,但是有一部分input框是不要用户填写的。当选择第二项时,出现地页面是全部都要填写的。不知道该如何实现?

  <select onchange="text1.disabled=this.selectedIndex==0">

  <option>False</option>

  <option>True</option>

  </select>

  <input type=text id=text1 disabled>

  ------------------------------------------------------------------>>>>>>>>>>>>>>

  我的目的是:打开一个web页(就称为'原页' 吧),点击一个按钮弹出一个小窗口(原页不关,小窗口最好可以拖动),在小窗口里提交一个表单到原页。有什么方法可以实现?

  给『原页』一个name属性,表单的target指向它

  <script>

  this.name = "bencalie";

  newwin = window.open("","","width=400,height=200");

  newwin.document.write("<form action='test.cgi' target='bencalie'><input type=submit></form>");

  </script>

  <<<<<<<<<<<<<<<<<<<<<<<==============================================

  没有边框的窗口::;;;;

  <HTML  XMLNS:IE>

  <meta  http-equiv="Content-Type"  content="text/html;  charset=gb2312">

  <IE:Download  ID="include"  STYLE="behavior:url(#default#download)"  />

  <title>Chromeless  Window</title>

  <SCRIPT  LANGUAGE="JScript">

  /*---  Special  Thanks  For  andot  ---*/

  /*

  This  following  code  are  designed  and  writen  by  Windy_sk  <[email protected]>

  You  can  use  it  freely,  but  u  must  held  all  the  copyright  items!

  */

  /*---  Thanks  For  andot  Again  ---*/

  var  CW_width =  400;

  var  CW_height =  300;

  var  CW_top =  100;

  var  CW_left =  100;

  var  CW_url =  "http://www.cnbruce.com/bluebook/";

  var  New_CW =  window.createPopup();

  var  CW_Body =  New_CW.document.body;

  var  content =  "";

  var  CSStext =  "margin:1px;color:black;  border:2px  outset;border-style:expression(onmouseout=onmouseup=function(){this.style.borderStyle='outset'},  onmousedown=function(){if(event.button!=2)this.style.borderStyle='inset'});background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;";

  //Build  Window

  include.startDownload(CW_url,  function(source){content=source});

  function  insert_content(){

  var  temp  =  "";

  CW_Body.style.overflow  =  "hidden";

  CW_Body.style.backgroundColor =  "white";

  CW_Body.style.border  =    "solid  black  1px";

  content  =  content.replace(/<a  ([^>]*)>/g,"<a  onclick='parent.open(this.href);return  false'  $1>");

  temp  +=  "<table  width=100%  height=100%  cellpadding=0  cellspacing=0  border=0>";

  temp  +=  "<tr  style=';font-size:12px;background:#0099CC;height:20;cursor:default'  ondblclick=\"Max.innerText=Max.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\"  onmouseup='parent.drag_up(event)'  onmousemove='parent.drag_move(event)'  onmousedown='parent.drag_down(event)'  onselectstart='return  false'  oncontextmenu='return  false'>";

  temp  +=  "<td  style='color:#ffffff;padding-left:5px'>Chromeless  Window  For  IE6  SP1</td>";

  temp  +=  "<td  style='color:#ffffff;padding-right:5px;'  align=right>";

  temp  +=  "<span  id=Help    onclick=\"alert('Chromeless  Window  For  IE6  SP1    -    Ver  1.0\\n\\nCode  By  Windy_sk\\n\\nSpecial  Thanks  For  andot')\"  style=\""+CSStext+"font-family:System;padding-right:2px;\">?</span>";

  temp  +=  "<span  id=Min      onclick='parent.New_CW.hide();parent.blur()'  style=\""+CSStext+"font-family:Webdings;\"  title='Minimum'>0</span>";

  temp  +=  "<span  id=Max      onclick=\"this.innerText=this.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\"  style=\""+CSStext+"font-family:Webdings;\"  title='Maximum'>1</span>";

  temp  +=  "<span  id=Close  onclick='parent.opener=null;parent.close()'  style=\""+CSStext+"font-family:System;padding-right:2px;\"  title='Close'>x</span>";

  temp  +=  "</td></tr><tr><td  colspan=2>";

  temp  +=  "<div  id=include  style='overflow:scroll;overflow-x:hidden;overflow-y:auto;  HEIGHT:  100%;  width:"+CW_width+"'>";

  temp  +=  content;

  temp  +=  "</div>";

  temp  +=  "</td></tr></table>";

  CW_Body.innerHTML  =  temp;

  }

  setTimeout("insert_content()",1000);

  var  if_max  =  true;

  function  show_CW(){

  window.moveTo(10000,  10000);

  if(if_max){

  New_CW.show(CW_top,  CW_left,  CW_width,  CW_height);

  if(typeof(New_CW.document.all.include)!="undefined"){

  New_CW.document.all.include.style.width  =  CW_width;

  New_CW.document.all.Max.innerText  =  "1";

  }

  }else{

  New_CW.show(0,  0,  screen.width,  screen.height);

  New_CW.document.all.include.style.width  =  screen.width;

  }

  }

  window.onfocus    =  show_CW;

  window.onresize  =  show_CW;

  //  Move  Window

  var  drag_x,drag_y,draging=false

  function  drag_move(e){

  if  (draging){

  New_CW.show(e.screenX-drag_x,  e.screenY-drag_y,  CW_width,  CW_height);

  return  false;

  }

  }

  function  drag_down(e){

  if(e.button==2)return;

  if(New_CW.document.body.offsetWidth==screen.width  &&  New_CW.document.body.offsetHeight==screen.height)return;

  drag_x=e.clientX;

  drag_y=e.clientY;

  draging=true;

  e.srcElement.setCapture();

  }

  function  drag_up(e){

  draging=false;

  e.srcElement.releaseCapture();

  if(New_CW.document.body.offsetWidth==screen.width  &&  New_CW.document.body.offsetHeight==screen.height)  return;

  CW_top    =  e.screenX-drag_x;

  CW_left  =  e.screenY-drag_y;

  }

  </SCRIPT>

  </HTML>

  ============================================================>>>>>>>>>>>>>>>>>>>>>

  还有图片的“黑白转彩色”

  <SCRIPT>

  function  doTrans(filterCode)

  {

  imgObj.filters[0].apply();

  oImg.style.filter  =  filterCode

  imgObj.filters[0].play();

  }

  </SCRIPT>

  <SPAN  id=imgObj

  onmouseleave='doTrans("gray")'

  style="FILTER:  progid:DXImageTransform.Microsoft.Fade(Overlap=1.00);  WIDTH:  1px"

  onmouseenter='doTrans("")'>

  <IMG  id=oImg  style="FILTER:  gray"  src="http://www.cnbruce.com/images/cnrose/a.gif">

  </SPAN>

  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  模拟office菜单:::

  :::::::::::::

  <style  type="text/css">

  *  {  font-size:  12px;  }

  body  {  margin:  0px;  }

  </style>

  <script  language="JavaScript">

  //  Office  XP  菜单

  var  sub_display  =  false;

  //  颜色数组说明:此数组储存菜单各部份颜色样式,可以改变颜色值达到改变样式的效果

  //  值依次为:高亮背景色,  高亮边框色,  菜单栏背景色,  子菜单背景色,  子菜单边框色,  子菜单标题色,  子菜单阴影色

  var  color  =  ['#B6BDD2',  '#0A246A',  '#D4D0C8',  '#F8F8F8',  '#666666',  '#DBD8D1',  '#DDDDDD'];

  //  菜单数组说明:此数组储存各菜单数据

  //  值依次为:

  //  1.  主菜单名称,  下拉菜单右延空白长度

  //  2.  第1个子菜单名称,  链接地址

  //  3.  第2个子菜单名称,  链接地址

  //  4.  ......

  var  menu  =  new  Array();

  menu[0]  =  [['菜单一',  50],  ['1111',  '1.htm'],  ['2222',  '2.htm'],  ['3333',  '3.htm']];

  menu[1]  =  [['菜单二',  50],  ['1111',  '1.htm'],  ['2222',  '2.htm'],  ['3333',  '3.htm']];

  menu[2]  =  [['菜单三',  50],  ['1111',  '1.htm'],  ['2222',  '2.htm'],  ['3333',  '3.htm']];

  menu[3]  =  [['菜单四',  50],  ['1111',  '1.htm'],  ['2222',  '2.htm'],  ['3333',  '3.htm']];

  menu[4]  =  [['菜单五',  50],  ['1111',  '1.htm'],  ['2222',  '2.htm'],  ['3333',  '3.htm']];

  menu[5]  =  [['菜单六',  50],  ['1111',  '1.htm'],  ['2222',  '2.htm'],  ['3333',  '3.htm']];

  document.write('<table  width="100%"  cellspacing="0"  cellpadding="0"  style="background-color:  '  +  color[2]  +  ';  border-left:  1px  #F4F4F4  solid;  border-top:  1px  #F4F4F4  solid;  border-right:  1px  #999999  solid;  border-bottom:  1px  #999999  solid;"  onSelectStart="return  false;"  onContextMenu="return  false;"><tr><td  width="5"><img  width="5"  height="1"></td><td><table  cellspacing="0"  cellpadding="2"><tr>');

  for  (var  i=0;  i<menu.length;  i++)

  document.write('<td  style="border:  1px  '  +  color[2]  +  '  solid;  cursor:  default;"  onClick="Menu_Click(this,  '  +  i  +  ')"  onMouseOver="Menu_Over(this,  '  +  i  +  ')"  onMouseOut="Menu_Out(this,  '  +  i  +  ')"><nobr><img  width="10"  height="1">'  +  menu[i][0][0]  +  '<img  width="10"  height="1"></nobr></td>');

  document.write('</td></tr></table></tr></table>');

  for  (var  i=0;  i<menu.length;  i++)  {

  document.write('<table  id="subMenu"  cellspacing="0"  cellpadding="0"  onSelectStart="return  false;"  onContextMenu="return  false;"  style="position:  absolute;  display:  none;  top:  1px;  border-left:  1px  '  +  color[4]  +  '  solid;  border-bottom:  1px  '  +  color[4]  +  '  solid;  cursor:  default;  filter:progid:dximagetransform.microsoft.dropshadow(color='  +  color[6]  +  ',offx=3,offy=3,positive=true)"><tr><td  style="border-top:  1px  '  +  color[4]  +  '  solid;  border-right:  1px  '  +  color[4]  +  '  solid;  background-color:  '  +  color[5]  +  ';"  onClick="subMenu_Hide(false)"><nobr><img  width="1"  height="2"><br><img  width="12"  height="1">'  +  menu[i][0][0]  +  '<img  width="12"  height="1"><br><img  width="1"  height="3"></nobr></td><td  style="border-bottom:  1px  '  +  color[4]  +  '  solid;"  onMouseOver="subMenu_Hide(true)"><img  width="'  +  menu[i][0][1]  +  '"  height="1"></td></tr><tr><td  colspan="2"  style="border-right:  1px  '  +  color[4]  +  '  solid;  background-color:  '  +  color[3]  +  ';"><table  width="100%"  cellspacing="1"  cellpadding="2"  style="  background-color:  '  +  color[3]  +  '">');

  for  (var  j=1;  j<menu[i].length;  j++)

  document.write('<tr><td  style="border:  1px  '  +  color[3]  +  '  solid;"  onMouseOver="subMenu_Over(this)"  onMouseOut="subMenu_Out(this)"  onClick="location.href=\''  +  menu[i][j][1]  +  '\'"><nobr> '  +  menu[i][j][0]  +  '</nobr></td></tr>');

  document.write('</td></tr></table></td></tr></table>');

  }

  function  Menu_Over(obj,  s)  {

  if  (sub_display)  {

  subMenu_Show(obj,  s)

  }

  else  {

  obj.style.backgroundColor  =  color[0];

  obj.style.border  =  '1px  '  +  color[1]  +  '  solid';

  }

  }

  function  Menu_Out(obj)  {

  obj.style.backgroundColor  =  '';

  obj.style.border  =  '1px  '  +  color[2]  +  '  solid';

  }

  function  Menu_Click(obj,  s)  {

  subMenu_Show(obj,  s)

  }

  function  subMenu_Over(obj)  {

  obj.style.backgroundColor  =  color[0];

  obj.style.border  =  '1px  '  +  color[1]  +  '  solid';

  }

  function  subMenu_Out(obj)  {

  obj.style.backgroundColor  =  '';

  obj.style.border  =  '1px  '  +  color[3]  +  '  solid';

  }

  function  subMenu_Hide(hide)  {

  for  (var  i=0;  i<subMenu.length;  i++)

  subMenu[i].style.display  =  'none';

  sub_display  =  hide;

  }

  function  subMenu_Show(obj,  s)  {

  subMenu_Hide(false);

  subMenu(s).style.posLeft  =  obj.offsetLeft  +  6;

  subMenu(s).style.display  =  '';

  sub_display  =  true;

  }

  window.onfocus  =  subMenu_Hide;

  </script>

  =-=======================-----------------========================================

  模仿OUTLOOK的菜单:

  <head>

  <style  type="text/css">

  .titleStyle{

  background-color:#3366cc;color:#ffffff;border-top:1px  solid  #FFFFFF;font-size:9pt;cursor:hand;

  }

  .contentStyle{

  background-color:#efefef;color:blue;font-size:9pt;

  }

  a{

  color:blue;

  }

  body{

  font-size:9pt;

  }

  </style>

  </head>

  <body>

  <script  language="JavaScript">

  <!--

  var  layerTop=20;              //菜单顶边距

  var  layerLeft=30;            //菜单左边距

  var  layerWidth=140;        //菜单总宽

  var  titleHeight=20;        //标题栏高度

  var  contentHeight=200;  //内容区高度

  var  stepNo=10;                  //移动步数,数值越大移动越慢

  var  itemNo=0;runtimes=0;

  document.write('<span  id=itemsLayer  style="position:absolute;overflow:hidden;border:1px  solid  #efefef;left:'+layerLeft+';top:'+layerTop+';width:'+layerWidth+';">');

  function  addItem(itemTitle,itemContent){

  itemHTML='<div  id=item'+itemNo+'  itemIndex='+itemNo+'  style="position:relative;left:0;top:'+(-contentHeight*itemNo)+';width:'+layerWidth+';"><table  width=100%  cellspacing="0"  cellpadding="0">'+

  '<tr><td  height='+titleHeight+'  onclick=changeItem('+itemNo+')  class="titleStyle"  align=center>'+itemTitle+'</td></tr>'+

  '<tr><td  height='+contentHeight+'  class="contentStyle">'+itemContent+'</td></tr></table></div>';

  document.write(itemHTML);

  itemNo++;

  }

  //添加菜单标题和内容,可任意多项,注意格式:

  addItem('欢迎','<BR>  WWW.CNBRUCE.COM');

  addItem('网页专区','<center><a  href="#">网页工具</a>  <BR><BR><a  href="#">技术平台</a>  <BR><BR><a  href="#">设计理念</a>  <BR><BR><a  href="#">更多</a></center>');

  addItem('美工教室','<center><a  href="#">平面设计  </a>  <BR><BR><a  href="#">三维空间</a>  <BR><BR><a  href="#">设计基础</a>  <BR><BR><a  href="#">更多..</a></center>');

  addItem('Flash','<center><a  href="#">基础教程</a>  <BR><BR><a  href="#">技巧运用</a>  <BR><BR><a  href="#">实例剖析</a>  <BR><BR><a  href="#">更多..</a></center>');

  addItem('多媒体','<center><a  href="#">DIRECTOR</a>  <BR><BR><a  href="#">Authorware</a>  <BR><BR><a  href="#">更多..</a></center>');

  addItem('精品赏析','<center><a  href="#">设计精品</a></center>');

  document.write('</span>')

  document.all.itemsLayer.style.height=itemNo*titleHeight+contentHeight;

  toItemIndex=itemNo-1;onItemIndex=itemNo-1;

  function  changeItem(clickItemIndex){

  toItemIndex=clickItemIndex;

  if(toItemIndex-onItemIndex>0)  moveUp();  else  moveDown();

  runtimes++;

  if(runtimes>=stepNo){

  onItemIndex=toItemIndex;

  runtimes=0;}

  else

  setTimeout("changeItem(toItemIndex)",10);

  }

  function  moveUp(){

  for(i=onItemIndex+1;i<=toItemIndex;i++)

  eval('document.all.item'+i+'.style.top=parseInt(document.all.item'+i+'.style.top)-contentHeight/stepNo;');

  }

  function  moveDown(){

  for(i=onItemIndex;i>toItemIndex;i--)

  eval('document.all.item'+i+'.style.top=parseInt(document.all.item'+i+'.style.top)+contentHeight/stepNo;');

  }

  changeItem(0);

  //-->

  </script>

  </body>