时间:2016.04.20 发布人:NOKIAE66
已解决问题
谷歌NOKIAE66用户在2016.04.20提交了关于“
蹉跎jquery无限级联下拉菜单简单实例演示”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T21:40:50。希望大家能够帮助她。
详细问题描述及疑问:期待您的答案,谢谢你帮我,祝你快乐,愿你事事如意
!
希望以下的回答,能够帮助你。
第1个回答
用户名:rwrxs
本文实例讲述了jquery无限染油孩依意材苗级联下拉菜单代码以及jquery无限级联下拉菜单实现思路。分享给大家供大家参考。具体如下:
最终效果图:
问答因为是级联,所以**必须是树型结构的,这里的测试**如下:看下效果图:1、效果图一:2、效果图二:3、效果图三: 由图可知,下拉框的个数并不是写死的,而是动态加载的破局又生周烧。每当下拉框选择改变的时候,会发送一次ajax请求,请求成功返回json格式**,当返回的**不为空时(即有子节点时),则会向页面中添加一个下拉框,没有则不添加。插件的实现代码如下:
(function($){$.fn.CascadingSelect损传书叶=function(options){//默认参数设置varsettings={url:"合凯视械言里极但常药/h**andler.ashx",//请求路径data:"0",//初始值(字符串伤格式)split:",",//分割符cssName:"select",//样式名称val:"id",//<o常举苏于处海镇宗营ptionvalue="id">name</option>text:"name",//<optionvalue="id">name</option>hiddenN季走古衣圆自区非突密ame:"selVal"//隐藏域的name属性的值}//合并参数if(opt洋威宽直础ions)$.extend(setting树校沿食听顺略s,options);//链式原则returnthis.each(function(){init($(this),***.data);/*初始化@paramcontainer容器对象@paramdata初始值*/functioninit(container,data){//创建隐藏域对象,并别没跑想输油皮单赋初始值var_input=$("<inputtype='hidden'name='"+settings.hiddenName+"'/>").a等汽弱服顾ppendTo(container).val(***.data);vararr=data.split(settings.split);for(vari=0;i<arr.length;i++){//创建下拉框createSelect(container,arr[i],arr[i+1]||-1);}}/*创建下拉框@paramcontainer容器对象@paramparentid父ID号@paramid自身ID号*/functioncreateSelect(container,parentid,id){//创建select对象,并将select对象放入container内var_select=$("<select></select>").appendTo(container).addClass(settings.cssName);//如果parentid为空,则_parentid值为春想0var_parentid=parentid空底另问黄空因需织||0;//发送AJAX请求,返回的data必须为json格式$.getJSON(settings.url,{parentid:_parentid},function(data){//添加子节点<option>addOptions(container,_s精敌考宗刘革画波击孙石elect,data婷屋).val(id||-时久准象缩八族做1)});}/*为下拉框添加<option>子右航阳文文更节点@paramcontainer容器对象@paramselect下拉框对象@paramdata子节点**(要求**为json格式)*/functionaddOptions(事良屋质画客依南container,select,data){select.append($('<optionvalue="-1">=请选择=</option>'));for(vari=0;i<data.length;i++){select.append($('<optionvalue="'+data[i][settings.val]+'">'+data[i][settings.text]+'</option>'));}//为select绑定change事件select.bind("change",function(){_onchange(container,$(this),$(this).val())});returnselect;}/*select的change事件函数@paramcontainer容器对象@paramselect下拉框对象@paramid当前下拉框的值*/function_onchange(container,select,id){varnextAll=select.nextAll("select");//如果当前select对象的值是空或-1(即:==请选择==),则将其后面的select对象全部移除if(!id||id=="-1"){nextAll.remove();}$.getJSON(settings.url,{parentid:id},function(data){if(data.length>0){var_html=$("<selectclass='"+settings.cssName+"'></select>");var_select=addOptions(container,_html,data);//判断当前select对象后面是否跟有select对象if(nextAll.length<1){select.after(_select);//没有则直接添加}else{nextAll.remove();//有则先移除再添加select.after(_select);}}else{nextAll.remove();//没有子项则后面的select全部移除} s**eVal(container);//进行**保存,此方法必须放在回调函数里面}); //s**eVal(container);//如果放在这里,则会出现bug}/*将选择的值保存在隐藏域中,用于表单提交保存@paramcontainer容器对象*/functions**eVal(container){vararr=newArray();arr.push(0);//为数组arr添加元素0,父节点从0开始,所以添加0$("select",container).each(function(){if($(this).val()>0){arr.push($(this).val());//获取container下每个select对象的值,并添加到数组arr}});//为隐藏域对象赋值$("input[name='"+settings.hiddenName+"']",container).val(arr.join(settings.split));}});}})(jQuery);注释我已经尽量写的详细了,但还是要针对一些知识点进行讲解。1、我这里后台语言用的是C#,因此你看到的请求路径是这样的(url:"/h**andler.ashx"),你用其它语言是没有问题的,但是通过ajax请求返回的**必须是json格式的**。 2、在初始化方法init()中,我们向容器中放入了一个隐藏域,这个隐藏域是用来存值的,我们通过一个s**eVal()方法为其赋值。之所以要加隐藏域,是因为我们选择的**最终 是要保存到**库中的,这样就会有表单提交操作,因此加个隐藏域。 3、默认参数设置(settings)里面的split分割符。这里用的是逗号(,)你也可以改用其它的,比如(-)或者(|)。它主要是用来拆分和组合所有下拉框的值的。 拆分主要是在初始化(init)的时候,比如你给的初始值(data)不是0,而是0,1,4这时就会将其拆分,逐一执行创建下拉框方法createSelect() 组合主要是在给隐藏域赋值的时候,用分割符将各个下拉框的值拼接成一个字符串,然后赋给隐藏域。4、默认参数设置(settings)里面的{val:"id",text:"name"}。它们对应的是你返回的json对象中对应的属性名。5、在_onchange()方法里面有写到s**eVal()执行位置的问题。之所以写在回调函数外面会出现bug,是因为$.getJSON()默认是异步的,在回调方法还没执行完时,就执行了 s**eVal()方法。我们来看来bug所在: 此漱藏域的值是错误的,正确的值应该是0,1,5。由于回调函数还没执行完,也就是nextAll.remove()这个还没执行的时候,就是执行了s**eVal()DEMO的h**tml部分的代码:
<html><head><title></title><styletype="text/css">*{margin:0;padding:0;}#box{width:500px;margin:100pxauto;}.select{width:120px;height:30px;margin-right:**x;}</style></head><body><!--容器--><divid="box"></div><scriptsrc="Scripts/jquery-1.4.1.min.js"type="text/j**ascript"></script><scriptsrc="Scripts/jquery.similar.cascadingselect.js"type="text/j**ascript"></script><scripttype="text/j**ascript">$("#box").CascadingSelect({data:"0,1,4"});//设置初始值为0,1,4</script></body></html>以上就是jquery实现无限级联下拉菜单效果的全部内容,希望对大家的学习有所帮助。