通过隐藏option实现select的联动效果

开始的时候需求是根据一定条件隐藏一部分<option>标签,类似联动效果,但是目前的html规范并没有为<option>提供隐藏的效果,因此常用的设置display或者visibility无效。网上大部分解决方案是删除<option>节点或<option>置空。这显然不能够满足需求。后来经过试验,选择了利用标签包装的解决方案,基本原理如下:
当<option>需要隐藏的时候,在<option>标签外包装一个<span>标签,再令<span>标签为不可见。
当<option>需要显示的时候,恢复其正常的状态,即,去掉外面的<span>标签。
由于比较懒,所以利用JQuery框架来操作DOM对象和CSS,代码如下:
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5     <title>Untitled Page</title>
 6     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
 7     <script type="text/javascript" language="javascript">
 8         $(function(){
 9             //Bind the change event
10             $("#dropLang").unbind("change", eDropLangChange).bind("change", eDropLangChange);
11             $("#dropFrame").unbind("change", eDropFrameChange).bind("change", eDropFrameChange);
12         });
13     
14         //The change event of language dropdown-list
15         var eDropLangChange = function(){
16             //The selected value of the language dropdown-list.
17             var selectedValue = $(this).val();
18             
19             //show all options.
20             $("#dropFrame").children("span").each(function(){
21                 $(this).children().clone().replaceAll($(this));         //use the content of the <span> replace the <span>
22             });
23             
24             //Filter the data through selected value of language dropdown-list except <Please Select>.
25             //If the option is <Please Select>, it only needs to show all and hide nothing.
26             if(parseInt(selectedValue) != 0){        
27                 //hide the option whose parentid is not equal with selected value of language dropdown-list.
28                 //The <Please Select> option should not be hidden.
29                 $("#dropFrame").children("option[parentid!='" + selectedValue + "'][value!='0']").each(function(){
30                     $(this).wrap("<span style='display:none'></span>");     //add a <span> around the <option> and hide the <span>.
31                 });
32             }
33         };
34         
35         //The change event of frame dropdown-list.
36         var eDropFrameChange = function(){
37             //Find the selected option of frame dropdown-list. set the value of language dropdown-list by selected parentid.
38             $("#dropLang").val($(this).children("option:selected").attr("parentid"));
39         };
40     </script>
41 </head>
42 <body>
43     <div>
44         <select id="dropLang">
45             <option selected="selected" value="0">&lt;Please Select&gt;</option>
46             <option value="1">Javascript</option>
47             <option value="2">Java</option>
48             <option value="3">C#</option>
49         </select>
50         <select id="dropFrame">
51             <option selected="selected" value="0">&lt;Please Select&gt;</option>
52             <option value="1" parentid="1">JQuery</option>
53             <option value="2" parentid="1">Prototype</option>
54             <option value="3" parentid="2">Struts</option>
55             <option value="4" parentid="2">Spring</option>
56             <option value="5" parentid="2">Velocity</option>
57             <option value="6" parentid="2">Hibernate</option>
58             <option value="7" parentid="3">ASP.NET MVC</option>
59             <option value="8" parentid="3">Castle</option>
60         </select>
61     </div>
62 </body>
63 </html>

      这样,通过上一个下拉框的选择过滤下拉框的内容,基本实现了隐藏<option>的效果,当然,也可以把这种方法利用在下拉框级联选择的功能上,无需Ajax。

该代码在IE6,IE7,Chrome2,Firefox3。5下验证通过。

转载于:https://www.cnblogs.com/zhongyueblog/archive/2009/11/10/1599770.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java SimpleTimeZone setEndRule()方法与示例

SimpleTimeZone类setEndRule()方法 (SimpleTimeZone Class setEndRule() method) Syntax: 句法&#xff1a; public void setEndRule(int en_mm, int en_dd, int en_time);public void setEndRule(int en_mm, int en_dd, int en_dow, int en_time);public void setEndRule(int…

Linux设备驱动开发--- DMA

文章目录1 设置DMA映射缓存一致性和DMADMA映射一致映射流式DMA映射2 完成的概念3 DMA引擎API分配DMA从通道设置从设备和控制器指定参数获取事务描述符提交事务发布待处理DMA请求并等待回调通知4 程序单缓冲区映射分散聚集映射DMA是计算机系统的一项功能&#xff0c;它允许设备在…

类加载器

一、类加载器 1&#xff0c;什么是类加载器&#xff1f; 类加载器就是用来加载字节码文件 2&#xff0c;类加载器的种类有哪些&#xff1f; 1&#xff09;BootStrap&#xff1a;引导类加载器&#xff1a;加载都是最基础的文件 2&#xff09;ExtClassLoader&#xff1a;扩展类加…

一个用java读取XML文件的简单方法(转)

XML文件 book.xml <book> <person> <first>Kiran</first> <last>Pai</last> <age>22</age> </person> <person> <first>Bill</first> <last>Gates</last> <age>46</age&g…

Java ObjectStreamField getName()方法与示例

ObjectStreamField类的getName()方法 (ObjectStreamField Class getName() method) getName() method is available in java.io package. getName()方法在java.io包中可用。 getName() method is used to get the name of this ObjectStreamField field. getName()方法用于获取…

【css】CSS中折叠margin的问题

为什么要翻译这篇说明&#xff1f;css2本有人已翻译过&#xff0c;但看一下&#xff0c;很粗糙&#xff08;不是说自己就怎么怎么样啊&#xff0c;翻译者真的是很值得敬佩的&#xff01;&#xff09;&#xff0c;近来跟css与xhtml接触得越来越多&#xff0c;但接触得越多&#…

算法---链表

文章目录反转链表合并两个有序链表删除重复元素反转链表 反转链表包括两种&#xff0c;反转全部元素或者反转部分元素。在这里&#xff0c;我们约定&#xff1a;数据元素类型是struct LinkNode&#xff0c;要反转链表的第一个节点是head&#xff0c;head的前面一个节点是pre&a…

SSM

二、环境设置&#xff08;MyEclipse&#xff09; 1&#xff0c;字体设置 window–>Preference->General->Appearance->Colors and Fonts->Basic Text->Font 2&#xff0c;workspace字符集设置 window–>Preference->General->Appearance->W…

IOS NSArray,NSDictionary

小结&#xff1a; NSArray有序的集合&#xff1b; NSDictionary无序的集合&#xff0c;可排序&#xff1b; 增删改查 ------NSArray----------- create : 1)NSArray *array [NSArray arrayWithObjects:"Henry","Jones", "Susan", "Smith&q…

Java PropertyPermission equals()方法与示例

PropertyPermission类equals()方法 (PropertyPermission Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether this object and the given object (ob) are equal or not…

c#配合oracle快速导入excel方法--原创(6万条记录5分钟左右)

原理&#xff1a;用c#采用读取Excel数据源方式将数据读入c#的datatable,循环datatable,将datatable中的数据用stringbuilder拼成insert into (字段名) valus (值);每5条插入一个符号&#xff08;作用是将sql字符串限制在4000字符以内&#xff09;&#xff0c;然后将拼成的字符串…

English最俗语法大全

一、先分析两个长难句 1,It is a truth universally acknowledged that a single man in possession of a good fortune must be in want of a wife. 人们公认这样一个事实&#xff0c;一个有钱的单身男人一定想要娶一个妻子。 in want of want 想要 university widely 广泛的…

tfs 内网和外网切换的方法。

C:\Windows\System32\drivers\etc的hosts文件配置一个123.67.128.109 geo-dept-3转载于:https://www.cnblogs.com/lwflt/archive/2012/07/23/2604731.html

observable_Java Observable countObservers()方法与示例

observable可观察的类countObservers()方法 (Observable Class countObservers() method) countObservers() method is available in java.util package. countObservers()方法在java.util包中可用。 countObservers() method is used to count the number of observers exists…

设计模式--Strategy 策略模式

所谓策略模式(Strategy Pattern)&#xff0c;就是将策略 (算法) 封装为一个对象&#xff0c;易于相互替换&#xff0c;如同 USB 设备一样可即插即用&#xff1b;如果将策略、具体的算法和行为&#xff0c;编码在某个类或客户程序内部&#xff0c;将导至事后的修改和扩展不易。 …

HDU-1518 Square dfs+剪枝

该题问给定的棍子能否组成一个正方形。首先我们要判定是否总长度是4的倍数&#xff0c;然后再决定是否存在某条边大于组合边长。 搜索的过程中也是可以进行剪枝了。 首先将边排序&#xff0c;我们可以假定所有的组合边由大小递减的边组成&#xff0c;那么我们在搜索的时候就不用…

英语思维黄金法则

一、谓语单一原则 英文的句子当中&#xff0c;有且只有一套谓语结构。 要想使用多个谓语&#xff0c;有以下三种方法&#xff1a; 1&#xff0c;利用连词将不同谓语并列起来 2&#xff0c;把其中的一些动词给降级&#xff08;v-ing v-ed 非谓语动词&#xff09; 3&#xff0c;…

java getname_Java文件类字符串getName()方法(带示例)

java getname文件类字符串getName() (File Class String getName()) This method is available in package java.io.File.getName(). 软件包java.io.File.getName()中提供了此方法。 This method is used to retrieve or return the filename or directory name and represente…

WF中DependencyObject和DependencyProperty的实现

WF中DependencyObject和DependencyProperty的实现 DependencyProperty的Register和RegisterAttached方法&#xff0c;将DependencyProperty存在IDictionary中完成注册&#xff0c;确保相同name的DependencyProperty在一个ownerType类型中只能有一个。 DependencyObject的GetVal…

hdu2115: I Love This Game

hdu2115: http://acm.hdu.edu.cn/showproblem.php?pid2115题意&#xff1a;输入n组名字和对应的时间&#xff08;分&#xff1a;秒&#xff09;&#xff0c;要求按时间长度由短到长排序&#xff0c;并输出对应排名&#xff0c;若时间一样&#xff0c;则按名字字典序排序&#…