菜单|动态|网页|下拉
JavaScript+PHP 应用一:网页制作中双下拉菜单的动态实现
---摘自互联网
在网页制作中,常常遇到这种情况,通过主下拉菜单的选择,动态的生成子下拉菜单。例如:在主菜单中有“焦点新闻”、“生活时尚”、“心情故事”三个选项,通过“焦点新闻”的选择,子菜单自动生成如“国内”、“国际”、“体育”、“文娱”,依此类推。
利用javascript,我们可以轻松实现上述效果。但问题是,如果菜单中的选项是从数据库(或其他文件)中动态提取,实现起来就并不是轻而易举的了。笔者根据自己的实际经验,向大家介绍一种利用javascript + php的实现方法,文中的数据库采用mysql。在本例中,笔者还将介绍在每一次表单提交之后,如何返回上一次菜单选项的选择状态。
文章中所介绍的php的作用,一是用来从数据库中提取菜单选项,另一作用,就是用来生成javascript代码。读者可以采用自己熟悉的解释型语言,如asp。
为了简化代码,笔者假设主菜单已经通过html构造,由于子菜单需要动态设计,所以只绘制了基本框架,html代码如下:
我们需要考虑的是,菜单的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);ntt"; //完成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语言,当单击主菜单时,子菜单将自动更新。同样道理,读者可以根据此思路,创造更复杂的多重菜单选项。
最后,笔者简要介绍一下,如何实现在表单提交后,仍然保持菜单项上一次的状态。技巧其实很多,而笔者采用的是隐含变量法。在表单中添加如下代码:
我们只需要在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.";ntt"; echo "document.all("mmenu").click();ntt"; echo "document.all("mmenu").selectedindex=".$h1.";ntt"; echo "document.all("smenu").selectedindex=".$h2; ?>
至此,我们已经实现双下拉菜单的动态实现方法。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

On September 3, version 1.5 of the Grand Theft Auto VI document which provides a detailed overview of everything that is known about the game to date. The updated version of the document was announced in a trailer published on X (formerly Twitter).??

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code<form name="myform"

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期;6、跨域问题;7、查看器模式;8、服务器问题;9、JavaScript执行时机;10、检查 console log等。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Chinese version
Chinese version, very easy to use

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Linux new version
SublimeText3 Linux latest version

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.
