使用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页面跳转常见实现方式汇总
Nov 28 Javascript
jquery根据一个值来选中select下的option实例代码
Aug 29 Javascript
AngularJs  unit-testing(单元测试)详解
Sep 02 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
Vuex实现计数器以及列表展示效果
Mar 10 Javascript
解决Angular2 router.navigate刷新页面的问题
Aug 31 Javascript
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
javascript面向对象三大特征之继承实例详解
Jul 24 Javascript
基于vue-draggable 实现三级拖动排序效果
Jan 10 Javascript
JS document内容及样式操作完整示例
Jan 14 Javascript
微信小程序实现多行文字滚动
Nov 18 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
用PHP实现文件上传二法
2006/10/09 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php语法检查的方法总结
2019/01/21 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
深入了解js原型模式
2019/05/30 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
python executemany的使用及注意事项
2017/03/13 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
专科毕业生求职简历的自我评价
2013/10/12 职场文书
厨房工作人员岗位职责
2013/11/15 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
超市采购员岗位职责
2014/02/01 职场文书
设备管理实施方案
2014/05/31 职场文书
新法人代表任命书
2014/06/06 职场文书
大跃进口号
2014/06/16 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
2015年教研员工作总结
2015/05/26 职场文书
小学英语听课心得体会
2016/01/14 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python