当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JavaScript+PHP 应用一:网页制作中双下拉菜单的动态实现

Javascript
javascript js cookie的存储,获取和删除
得到元素真实的背景颜色的js代码
js获取url参数的使用扩展实例
javascript 屏蔽鼠标键盘的几段代码
兼容IE FF Opera的javascript最短的拖动代码
创建一个复制UBB软件信息的链接或按钮的js代码
js实现iframe动态调整高度的代码
浏览器无法运行JAVA脚本的解决方法
js让弹出新窗口居中显示的脚本
js常见表单应用技巧
javascript 点击整页变灰的效果(可做退出效果)。
制作符合用户体验的漂亮的input输入框
img的onload的另类用法
解读IE和firefox下JScript和HREF的执行顺序
用javascrpt将指定网页保存为Excel的代码
语义化 H1 标签
JavaScript中Math对象使用说明
JavaScipt基本教程之前言
JavaScipt基本教程之JavaScript语言的基础
JavaScipt对象的基本知识

Javascript 中的 JavaScript+PHP 应用一:网页制作中双下拉菜单的动态实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-10   浏览: 472 ::
收藏到网摘: n/a

在网页制作中,常常遇到这种情况,通过主下拉菜单的选择,动态的生成子下拉菜单。例如:在主菜单中有“焦点新闻”、“生活时尚”、“心情故事”三个选项,通过“焦点新闻”的选择,子菜单自动生成如“国内”、“国际”、“体育”、“文娱”,依此类推。

利用JavaScript,我们可以轻松实现上述效果。但问题是,如果菜单中的选项是从数据库(或其他文件)中动态提取,实现起来就并不是轻而易举的了。笔者根据自己的实际经验,向大家介绍一种利用JavaScript + PHP的实现方法,文中的数据库采用MySQL。在本例中,笔者还将介绍在每一次表单提交之后,如何返回上一次菜单选项的选择状态。

文章中所介绍的PHP的作用,一是用来从数据库中提取菜单选项,另一作用,就是用来生成JavaScript代码。读者可以采用自己熟悉的解释型语言,如ASP。

为了简化代码,笔者假设主菜单已经通过HTML构造,由于子菜单需要动态设计,所以只绘制了基本框架,HTML代码如下:

<select name="mmenu" onChange="javascript:setMenu()"> //主菜单设计

<option value="a">焦点新闻</option>

<option value="b">生活时尚</option>

<option value="c">心情故事</option>

//value必须与下文的menu数组相一致

</select>

<select name="smenu">  //子菜单设计

</select>

我们需要考虑的是,菜单的OnChange()事件需要完成哪些步骤。其大致过程是,根据主菜单的选项,构造子菜单项目。而子菜单的项目文字最好事先设定。根据这个思路,笔者采用了JavaScript中的联合数组记录子菜单选项,并由PHP在加载时自动生成。由此,笔者设计了如下的JavaScript函数setMenu():

function setMenu(){

    menu=Array("a","b","c");   //构造menu联合数组

     <?php                   //开始PHP程序

         $DB = new My_DB(); 

         $DB->Database = "***";    //构造新的MySQL连接,这里使用了PHPLIB

         $mmenu = array("a","b","c");  //这里笔者作了简化

         for ($i=0;$i<count($mmenu);$i++){

             $id = $mmenu[$i];

             $DB->query("select menu from class where menuid ='".$id."'");

//假设菜单选项存放在class表的menu字段,menuid用来标识menu

             while ($DB->next_record()){

                 $smenu[] = "\"".$DB->f("menu")."\"";

             }

             if (isset($smenu) && is_array($smenu)){

                 $str = implode(",",$smenu);

                 echo "menu[\"$id\"] =Array($str);\n\t\t"; 

//完成menu联合数组的填充

                 unset($smenu);    //删除smenu变量

             }

         }

     ?>  //结束PHP程序

     with (document) {

          id=all("mmenu").value;  //获得主菜单的value值

          arr_menu=menu[id];

         for(i=all("smenu").options.length;i>=0;i--){

                  all("smenu").options.remove(i);  //需要清除原有的项目

        }

        if (arr_menu.length==0){

             return;

         }

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

              obj=createElement("option");

             obj.text=arr_class[i];

              all("smenu").options.add(obj);

         }

     }

}

这样每次显示文档时,PHP部分将解释为Javascript语言,当单击主菜单时,子菜单将自动更新。同样道理,读者可以根据此思路,创造更复杂的多重菜单选项。

最后,笔者简要介绍一下,如何实现在表单提交后,仍然保持菜单项上一次的状态。技巧其实很多,而笔者采用的是隐含变量法。在表单中添加如下代码:

<input type="hidden" name="h1">

<input type="hidden" name="h2">

我们只需要在Form表单的OnSubmit()事件中给每个隐含变量赋值即可。即:

document.all("h1").value=document.all("mmenu").selectedIndex;

document.all("h2").value=document.all("smenu").selectedIndex;

为了利用隐含变量,在文档的Body的onLoad()事件中,我们利用PHP方法(也可用其它方法)来控制菜单的显示:

<?php

     if (!isset($h1)){  //只需要判断$h1

         $h1 = 0;

         $h2 = 0;

     }

     echo "document.all(\"mmenu\").selectedIndex=".$h1.";\n\t\t";

     echo "document.all(\"mmenu\").click();\n\t\t";

     echo "document.all(\"mmenu\").selectedIndex=".$h1.";\n\t\t";

     echo "document.all(\"smenu\").selectedIndex=".$h2;

?>

至此,我们已经实现双下拉菜单的动态实现方法。