使用js+jquery实现无限极联动


Posted in Javascript onMay 23, 2013

今天工作需要写树形的联动,于是写了个可扩展的无限极联动下拉选项
代码写的比较凌乱 先mark有空再整理

使用js+jquery实现无限极联动

随便截个图!
先贴数据库

id category_name 分类名 pid 父分类id orders 排序
1 22223331 0 1
2 2222111 1 1
12 44444 11 0
5 2222 1 1
6 2222 1 1
11 333 2 0
13 555555 12 0

页面代码 用的SMARTY

<div id="select" >
    <select name="category_1" id="category_1" onChange="change('category_1');">
        <option>请选择分类</option>
        <!-- {foreach from=$galleryCategory item=category} -->
            <option value="{$category.id}">{$category.category_name}</option>
        <!-- {/foreach} -->    
    </select>
</div>

$galleryCategory 去数据的PHP代码为
$sql = " select * from yl_gallery_category where pid = 0"; 
$galleryCategory = $db->query($sql); 
$smarty->assign("galleryCategory",$galleryCategory);

用的原生态代码 还是比较容易理解的
然后就是关键的 JS代码了function change(val) {
var str = val; //select的id
    var num; //当前级数
    var id; // 分类id
    num = str.substr(9,10);
    //alert(num);
    var nownum = parseInt(num)+1; // 将字符串转换为数字
    id = $("#"+str+"").val();
    var r = /^[1-9]+[0-9]*]*$/; //正整数
    if (!r.test(id)) {
        //清空过时的选项
        $("select").each(function(index){
            if(index+1 > num) {
                $(this).remove();
            }
        })        return false;
    }
    var url = 'gallery.php?act=category&pid='+id;
    $.ajax({
        type: "POST",
        cache: false,
        url: url,
        datatype : 'json',
        timeout : 3000,
        success: function(result){
            if ( result != 0) {    
                var html = "<select name=category_"+nownum+"     id=category_"+nownum+"  onChange=change('category_"+nownum+"'); >";
                html += "<option>请选择分类 </option>";
                var datas = eval(result);
                $.each(datas, function(i,val){      
                    html += "<option value='"+val.id+"' >"+val.category_name+"</option>";
                });   
                html += "</select>";
                //清空过时的选项
                $("select").each(function(index){
                    if(index+1 > num) {
                        $(this).remove();
                    }
                })
                $("#select").append(html);
            } else {





//清空过时的选项
                $("select").each(function(index){
                    if(index+1 > num) {
                        $(this).remove();
                    }
                })


 }
        },
        error: false
    });
}

AJAX 取数据的PHP代码
$sql = " select * from yl_gallery_category where pid = " .$pid; 
    $res = $db->query($sql); 
    if (empty($res)) { 
        $res = 0; 
    } 
    echo json_encode($res);

OK 大功告成!
Javascript 相关文章推荐
JavaScript入门教程(11) js事件处理
Jan 31 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
Apr 21 Javascript
js下拉框二级关联菜单效果代码具体实现
Aug 03 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
jQuery中get方法用法分析
Dec 07 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 Javascript
layui 中select下拉change事件失效的解决方法
Sep 20 Javascript
node后端服务保活的实现
Nov 10 Javascript
js实现烟花特效
Mar 02 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
Dec 16 Javascript
dwz 如何去掉ajaxloading具体代码
May 22 #Javascript
自动最大化窗口的Javascript代码
May 22 #Javascript
JS中的prototype与面向对象的实例讲解
May 22 #Javascript
JS定时关闭窗口的实例
May 22 #Javascript
jquery自定义属性(类型/属性值)
May 21 #Javascript
jquery实现智能感知连接外网搜索
May 21 #Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
May 21 #Javascript
You might like
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
php获取url参数方法总结
2014/11/13 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
js实现无缝滚动图
2017/02/22 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
python 字典修改键(key)的几种方法
2018/08/10 Python
在双python下设置python3为默认的方法
2018/10/31 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
学校门卫岗位职责
2014/03/16 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公司开业致辞
2015/07/29 职场文书
宾馆安全管理制度
2015/08/06 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫