通过隐藏option实现select的联动效果
2009-11-10 13:01
417 查看
开始的时候需求是根据一定条件隐藏一部分<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
$("#dropLang").unbind("change", eDropLangChange).bind("change", eDropLangChange);
$("#dropFrame").unbind("change", eDropFrameChange).bind("change", eDropFrameChange);
});
//The change event of language dropdown-list
var eDropLangChange = function(){
//The selected value of the language dropdown-list.
var selectedValue = $(this).val();
//show all options.
$("#dropFrame").children("span").each(function(){
$(this).children().clone().replaceAll($(this)); //use the content of the <span> replace the <span>
});
//Filter the data through selected value of language dropdown-list except <Please Select>.
//If the option is <Please Select>, it only needs to show all and hide nothing.
if(parseInt(selectedValue) != 0){
//hide the option whose parentid is not equal with selected value of language dropdown-list.
//The <Please Select> option should not be hidden.
$("#dropFrame").children("option[parentid!='" + selectedValue + "'][value!='0']").each(function(){
$(this).wrap("<span style='display:none'></span>"); //add a <span> around the <option> and hide the <span>.
});
}
};
//The change event of frame dropdown-list.
var eDropFrameChange = function(){
//Find the selected option of frame dropdown-list. set the value of language dropdown-list by selected parentid.
$("#dropLang").val($(this).children("option:selected").attr("parentid"));
};
</script>
</head>
<body>
<div>
<select id="dropLang">
<option selected="selected" value="0"><Please Select></option>
<option value="1">Javascript</option>
<option value="2">Java</option>
<option value="3">C#</option>
</select>
<select id="dropFrame">
<option selected="selected" value="0"><Please Select></option>
<option value="1" parentid="1">JQuery</option>
<option value="2" parentid="1">Prototype</option>
<option value="3" parentid="2">Struts</option>
<option value="4" parentid="2">Spring</option>
<option value="5" parentid="2">Velocity</option>
<option value="6" parentid="2">Hibernate</option>
<option value="7" parentid="3">ASP.NET MVC</option>
<option value="8" parentid="3">Castle</option>
</select>
</div>
</body>
</html> 这样,通过上一个下拉框的选择过滤下拉框的内容,基本实现了隐藏<option>的效果,当然,也可以把这种方法利用在下拉框级联选择的功能上,无需Ajax。
该代码在IE6,IE7,Chrome2,Firefox3。5下验证通过。
当<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
$("#dropLang").unbind("change", eDropLangChange).bind("change", eDropLangChange);
$("#dropFrame").unbind("change", eDropFrameChange).bind("change", eDropFrameChange);
});
//The change event of language dropdown-list
var eDropLangChange = function(){
//The selected value of the language dropdown-list.
var selectedValue = $(this).val();
//show all options.
$("#dropFrame").children("span").each(function(){
$(this).children().clone().replaceAll($(this)); //use the content of the <span> replace the <span>
});
//Filter the data through selected value of language dropdown-list except <Please Select>.
//If the option is <Please Select>, it only needs to show all and hide nothing.
if(parseInt(selectedValue) != 0){
//hide the option whose parentid is not equal with selected value of language dropdown-list.
//The <Please Select> option should not be hidden.
$("#dropFrame").children("option[parentid!='" + selectedValue + "'][value!='0']").each(function(){
$(this).wrap("<span style='display:none'></span>"); //add a <span> around the <option> and hide the <span>.
});
}
};
//The change event of frame dropdown-list.
var eDropFrameChange = function(){
//Find the selected option of frame dropdown-list. set the value of language dropdown-list by selected parentid.
$("#dropLang").val($(this).children("option:selected").attr("parentid"));
};
</script>
</head>
<body>
<div>
<select id="dropLang">
<option selected="selected" value="0"><Please Select></option>
<option value="1">Javascript</option>
<option value="2">Java</option>
<option value="3">C#</option>
</select>
<select id="dropFrame">
<option selected="selected" value="0"><Please Select></option>
<option value="1" parentid="1">JQuery</option>
<option value="2" parentid="1">Prototype</option>
<option value="3" parentid="2">Struts</option>
<option value="4" parentid="2">Spring</option>
<option value="5" parentid="2">Velocity</option>
<option value="6" parentid="2">Hibernate</option>
<option value="7" parentid="3">ASP.NET MVC</option>
<option value="8" parentid="3">Castle</option>
</select>
</div>
</body>
</html> 这样,通过上一个下拉框的选择过滤下拉框的内容,基本实现了隐藏<option>的效果,当然,也可以把这种方法利用在下拉框级联选择的功能上,无需Ajax。
该代码在IE6,IE7,Chrome2,Firefox3。5下验证通过。
相关文章推荐
- 通过隐藏option实现select的联动效果
- 通过隐藏option实现select的联动效果
- 通过隐藏option实现select的联动效果
- 通过隐藏option实现select的联动效果
- 通过隐藏option实现select的联动效果
- 通过隐藏option实现select的联动效果
- 通过隐藏option实现select的联动效果 文章源自:烈火网,原文:http://www.veryhuo.com/a/view/10548.html
- 通过隐藏option实现select的联动效果
- 如何通过jQuery实现select下拉框的联动效果
- 通过创建元素从而实现三个下拉框的联动效果(create.Element("option"))和提交表单时的验证p.match("请选择")
- Select控件实现联动下拉列表框效果
- 二级联动效果实现(在javascript中解析xml文件添加到html(select)中)
- JS简单实现多级Select联动菜单效果代码
- jsp+javascript实现动态下拉二级联动(select+option)
- 通过AJAX调用页面后台代码方法实现省级三级联动效果 (简单练习)前台
- MySQL通过自增一列在Select ... into outfile...里面实现CSV导出带字段的效果
- 利用select实现年月日三级联动的日期选择效果
- Js实现select联动,option从数据库中读取[转]
- 通过创建元素从而实现两个下拉框的联动效果
- jquery+php实现select联动效果(两级联动)