使用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+CSS实现仿天猫侧边网页菜单效果
Aug 25 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
JavaScript判断微信浏览器实例代码
Jun 13 Javascript
JS实现页面数据无限加载
Sep 13 Javascript
微信公众号支付H5调用支付解析
Nov 04 Javascript
ES6入门教程之let和const命令详解
May 17 Javascript
详解Angular 4.x NgTemplateOutlet
May 24 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
May 22 jQuery
Vue不能检测到Object/Array更新的情况的解决
Jun 26 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
Apr 21 Javascript
package.json各个属性说明详解
Mar 11 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
Jul 30 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
自己做矿石收音机
2021/03/02 无线电
PHP学习笔记之数组篇
2011/06/28 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
php实现微信模板消息推送
2018/03/30 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Python如何读写二进制数组数据
2020/08/01 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
联想英国官网:Lenovo英国
2019/07/17 全球购物
小班重阳节活动方案
2014/02/08 职场文书
《自选商场》教学反思
2014/02/14 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL