js 浮动层菜单收藏


Posted in Javascript onJanuary 16, 2009

使用说明
即仅需把附件中的 JS 文件和 CSS 文件引用到网页里,如:

<script type="text/javascript" src="DivMenu.js"></script> 
<link href="DivMenu.css" rel="stylesheet" type="text/css" />

在线演示 http://img.3water.com/online/DivMenu/DivMenu.htm
下载源码打包 http://img.3water.com/online/DivMenu/DivMenu.zip
其中 DivMenu.js 是经 Javascript compressor 压缩的精简版本,供生成实际使用。DivMenu_develop.js 是带详细注释的开发版,供学习研究。使用时可以参考 DivMenu.css 文件中的注释,自行修改样式定义。
JavaScript 程序已经实现免打扰(unobtrusive),即引用此 JS 文件的 HTML 文件无需任何其它调整。但还未实现完全匿名(anonymous),意思是此程序仍然创建了全局变量和若干网页节点,已经尽量做到少增加全局变量和节点,但使用时仍请注意变量命名冲突。此程序仅增加一个全局变量“DivMenu”,增加的网页节点比较多,对应替换掉的每个 SELECT 节点增加两个节点,名字分别是 SELECT 节点的 name 值加“_a”后缀和“_div”后缀,例如原有某 SELECT 节点的名字是“menu”,则新增的两个节点名字是“menu_a”和“menu_div”。
功能说明
多选菜单不转换,多选菜单中的提示文字只能用 disabled="disabled" 来实现了。 若要选择多个,请住 Ctrl 键再选择 多选1 多选2 多选3 多选4 多选5 放一个多选菜单,用来演示多选菜单不会被替换,以及在 IE6 中浮动层可以正常显示在其它 SELECT 以上了。
以上是个实用的范例,几组经典的 SELECT 选择菜单,第一个是复杂带分组的,提示文字用 disabled="disabled" 的第一个 option 实现,后一个是简单的,提示文字用的是没有 value 属性的那个 option。实践发现 FF 可以正常处理 disabled="disabled" 或者仅 disabled 的 option,让它可以不可选的状态,而 IE 则无视任何disabled="disabled" 和 disabled,所以估计通常 IE 里的菜单想用提示文字都会用没有 value 属性或者 value=""的那个 option。可以看它的源码就是原来的 SELECT,不需要任何改动。
基本思路是把文档中原有的 SELECT 菜单转换成隐藏型的 INPUT 表单项,用 A 元素来做菜单的提示文字条和选项条,用 DIV 层做菜单,各个选项也用 A 元素来替代,点击时把值赋给隐藏型的 INPUT 表单项。
主要功能或限制包括:
所有使用习惯遵循传统的 SELECT 菜单。
只有单选的 SELECT 菜单会被替换,多选菜单维持不变,因为通常多选菜单也不用浮动层菜单来替代。
支持各种 SELECT 元素的特性,如把 disabled 的或者没有 value 的 option 作为提示文字条;用 optgroup 分组的选项也会在新菜单中分组。并且专门针对 IE 6 中 SELECT 挡住 DIV 层的 BUG 进行了修正。
支持默认选中项。
几乎支持普通菜单的所有功能,但是不支持额外的交互功能,如 JavaScript 实时创建的 Option 选项、联动选项等,比如选一个城市区县会相应变化这类的功能是不支持的。
全部样式都用 CSS 定义,字号使用相对大小,无需改动即可适应多数网页。
菜单位置和尺寸均设置成灵活的,可适应任意的网页排版和布局。做的时候考虑的是要能在替代的 A 元素中显示时,放得下最宽的选项文字,因而没有直接取原有 SELECT 框的宽度。因此菜单尺寸可能比原有的 SELECT 宽,使用时请注意。
欢迎试用,并提出意见建议,共用探讨改进。
Javascript 相关文章推荐
JavaScript EasyPager 分页函数
May 25 Javascript
有关JavaScript的10个怪癖和秘密分享
Aug 28 Javascript
js动态移动滚动条至底部示例代码
Apr 24 Javascript
jQuery给元素添加样式的方法详解
Dec 30 Javascript
Javascript 实现全屏滚动实例代码
Dec 31 Javascript
Vue.js自定义指令的用法与实例解析
Jan 18 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
Vue实现动态创建和删除数据的方法
Mar 17 Javascript
create-react-app安装出错问题解决方法
Sep 04 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
基于Ionic3实现选项卡切换并重新加载echarts
Sep 24 Javascript
jquery中常用的SET和GET
Jan 13 #Javascript
JavaScript 私有成员分析
Jan 13 #Javascript
js利用Array.splice实现Array的insert/remove
Jan 13 #Javascript
JavaScript delete操作符应用实例
Jan 13 #Javascript
在网页里看flash的trace数据的js类
Jan 10 #Javascript
捕获关闭窗口的脚本
Jan 10 #Javascript
javascript 自动转到命名锚记
Jan 10 #Javascript
You might like
PHP页面间传递参数实例代码
2008/06/05 PHP
php绘制一个扇形的方法
2015/01/24 PHP
浅谈PHP的反射API
2017/02/26 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
javascript 对象的定义方法
2007/01/10 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
Puppet的一些技巧
2018/09/17 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
python实现狄克斯特拉算法
2019/01/17 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Python实现微信机器人的方法
2019/09/06 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
培训心得体会
2013/12/29 职场文书
农村婚礼证婚词
2014/01/08 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
党员进社区活动总结
2015/05/07 职场文书
小王子读书笔记
2015/06/29 职场文书
python for循环赋值问题
2021/06/03 Python
java基础——多线程
2021/07/03 Java/Android
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技
详解OpenCV曝光融合
2022/04/29 Python