使用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:new 一个函数和直接调用函数的区别分析
Jul 10 Javascript
jquery+ajax实现跨域请求的方法
Jan 20 Javascript
JavaScript获得表单target属性的方法
Apr 02 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
Vue.js组件tab实现选项卡切换
Mar 23 Javascript
原生JS实现小小的音乐播放器
Oct 16 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 Javascript
jquery使用FormData实现异步上传文件
Oct 25 jQuery
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
Jun 06 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 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删除HTMl标签的三种解决方法
2013/06/30 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
图解javascript作用域链
2019/05/27 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
python决策树之CART分类回归树详解
2017/12/20 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
python numpy库np.percentile用法说明
2020/06/08 Python
浙大网新C/C++面试解惑
2015/05/27 面试题
优秀员工获奖感言
2014/03/01 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
python单元测试之pytest的使用
2021/06/07 Python
python编程实现清理微信重复缓存文件
2021/11/01 Python
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript