DynamicOptionList连动菜单代码_表单特效
使用前请看一下说明,不会耽误你多少时间,明白以后有助你快速实现这个小功能,实际上非常简单,与你使用的开发语言也没有什么关系:
1.
这个下拉项可以保留或忽略,内容如“==查看所有==”可替换为自己需要的内容,value="all" 属性可以获得一个附加的全过滤显示功能,建议保留:)
2.下拉菜单数据格式,(实际开发可以由后台程序生成一个数据格式字符串,这个数据串格式和你查询的表结构应该是一样的,传到模板上取得这个数据格式串即可,所有下拉菜单数据是一次传到页面上的,并且与你使用的语言开发实现没有什么关系,只要你想办法得到这个字符串格式就行了)如下:
a.第一级连动菜单的下拉选项,格式为 (下拉选项option内容,下拉选项option值;......)
"上海,01;江西,02";
b. 第二级连动菜单的下拉选项,(子下拉选项option过滤值,子下拉选项option内容,子下拉选项option值;......)
"01,徐汇区,001;01,嘉定区,002;01,黄浦区,003;02,南昌市,004;02,九江市,005;02,上饶市,006";
c. 第三级连动菜单的下拉选项,(子下拉选项option过滤值,子下拉选项option内容,子下拉选项option值;......)
"001,徐汇1区,0001;002,嘉定1区,0002;003,黄浦1区,0003;004,南昌1市,0004;005,九江1市,0005;006,上饶1市,0006";
.
.
.
第 N 级连动菜单的下拉选项,(子下拉选项option过滤值,子下拉选项option内容,子下拉选项option值;......)
除了第一级没有子下拉选项option过滤值这一项外,其他子集都有子下拉选项option过滤值
3.实际可实现N级连动菜单,只要由当前菜单驱动它的子菜单即可,类似与责任链模式;
4.实际开发将
5.下文举了4个例子,实际都一样,只是名字和样式不一样而已,名称后缀('_'下划线作为后缀的分隔符)不是必要的;
<script> <BR><!-- <BR>//测试用的一组数据 <br><br>//第1级下拉菜单数据 <BR>var opt = "上海,01;江西,02"; <br><br>//第2级下拉菜单数据 <BR>var subopt = "01,徐汇区,001;01,嘉定区,002;01,黄浦区,003;02,南昌市,004;02,九江市,005;02,上饶市,006"; <br><br>//第3级下拉菜单数据 <BR>var subsubopt = "001,徐汇1区,0001;002,嘉定1区,0002;003,黄浦1区,0003;004,南昌1市,0004;005,九江1市,0005;006,上饶1市,0006"; <br><br>/** <BR> * get Element By Id or name. <BR> * 根据一个dom对象的名称返回这个对象,省略了你 <BR> * 直接操作document.getElementById的过程. <BR> * <BR> * 例如: $('默认文本框的名称').value <BR> * 就可以取得它的value <BR> */ <BR>function $() { <BR> var elements = new Array(); <br><br> for (var i = 0; i < arguments.length; i++) { <BR> var element = arguments[i]; <BR> if (typeof element == 'string') <BR> element = document.getElementById(element); <br><br> if (arguments.length == 1) <BR> return element; <br><br> elements.push(element); <BR> } <br><br> return elements; <BR>} <br><br>/* <BR> * 自动填充一个下拉列表,一般用于填充连动菜单的第一项 <BR> * <BR> * selname :: 当前下拉选项(this) <BR> * 后缀是为了区分由程序动态生成的如果有多个相同的下拉选项而设 <BR> * 置的一个辅助名称后缀('_'下划线作为后缀的分隔符),如果没有这 <BR> * 个需要可以忽略 “_后缀”,只要设置一个普通的名称即可. <BR> * <BR> * seldata :: 数据源,菜单的数据项(子下拉选项名称,子下拉选项值,子下拉选项过滤值) <BR> * filter :: 下拉选项的过滤条件 <BR> * <BR> */ <BR>function fillselect(selname,seldata,filters) { <BR> var sel = $(selname); <BR> var data = seldata.split(";"); <BR> var filtersdata = filters.split(";"); <br><br> var index = ""; <BR> var selkey = ""; <BR> var selvalue = ""; <br><br> if(data.length > 0) { <br><br> //过滤条件为'all',显示全部,用于连动菜单 <BR> if(filtersdata[0] == 'all') { <BR> sel.options[0] = new Option('==查看所有==','all'); <br><br> for(i=0; i < data.length; i++) { <BR> selkey = data[i].split(",")[1]; <BR> selvalue = data[i].split(",")[2]; <BR> sel.options[sel.length] = new Option(selkey,selvalue); <BR> } <br><br> return; <BR> } <br><br> sel.options[0] = new Option('==查看所有==','all'); <BR> for(i=0;i < data.length; i++) { <br><br> //有过滤条件的下拉项(连动菜单数据格式) <BR> if (data[i].split(",").length == 3) { <BR> for(j=0; j < filtersdata.length; j++){ <BR> if( (data[i].split(",")[0] == filtersdata[j]) ) { <BR> selkey = data[i].split(",")[1]; <BR> selvalue = data[i].split(",")[2]; <BR> sel.options[sel.length] = new Option(selkey,selvalue); <BR> } <BR> } <BR> } <br><br> //无过滤条件的下拉项(非连动菜单数据格式) <BR> if (data[i].split(",").length == 2) { <BR> selkey = data[i].split(",")[0]; <BR> selvalue = data[i].split(",")[1]; <BR> sel.options[sel.length] = new Option(selkey,selvalue); <BR> } <br><br> } <br><br> if (sel.length == 1) { <BR> sel.options[0] = new Option('==没有选项==',''); <BR> }else{ <br><br> } <BR> } <BR>} <br><br>/* <BR> * 连动下拉列表的驱动函数 <BR> * <BR> * selname_src :: 当前下拉选项(this) <BR> * <BR> * subselname_src :: 所要驱动的子下拉选项的名称(名称结构为: 名称_后缀 或 名称) <BR> * 后缀是为了区分由程序动态生成的如果有多个相同的下拉选项而设 <BR> * 置的一个辅助名称后缀('_'下划线作为后缀的分隔符),如果没有这 <BR> * 个需要可以忽略 “_后缀”,只要设置一个普通的名称即可. <BR> * <BR> * subseldata_src :: 数据源,被驱动菜单的数据项. <BR> * 数据源格式 : (子下拉选项option过滤值,子下拉选项option内容,子下拉选项option值;......) <BR> * <BR> */ <BR>function driverselect(selname_src,subselname_src,subseldata_src) { <br><br> var index = "", selkey = "", selvalue = ""; <br><br> var selName="", selSuffix=""; <BR> var subselName="", subselSuffix=""; <br><br> if(selname_src.name.split("_").length==2) { <BR> selName=selname_src.name.split("_")[0]; <BR> selSuffix="_" + selname_src.name.split("_")[1]; <BR> }else{ <BR> selName=selname_src.name; <BR> } <br><br> if(subselname_src.split("_").length==2) { <BR> subselName=subselname_src.split("_")[0]; <BR> subselSuffix="_" + subselname_src.split("_")[1]; <BR> }else{ <BR> subselName=subselname_src; <BR> } <br><br> var source = $(selName+selSuffix); <BR> var target = $(subselName+subselSuffix); <BR> target.length=1; <br><br> var filters = ""; <BR> for(j=0; j < source.length; j++) { <BR> if(source[j].selected){ <BR> filters = filters + source[j].value + ';'; <BR> } <BR> } <br><br> fillselect(target,subseldata_src,filters); <BR>} <br><br>//--> <BR></script>
<script> <BR><!-- <BR>//初始化sample1:第一个下拉菜单项 <BR>fillselect('sel_1',opt,''); <br><br>//初始化sample2:第一个下拉菜单项 <BR>fillselect('sel_2',opt,''); <br><br>//初始化sample3:第一个下拉菜单项 <BR>fillselect('selM_1',opt,''); <br><br>//初始化sample4:第一个下拉菜单项 <BR>fillselect('selM_2',opt,''); <BR>//--> <BR></script>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。
