使用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实现unicode和字符的互相转换
Jul 18 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
Jun 25 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
May 18 Javascript
angularjs基础教程
Dec 25 Javascript
js实现跨域访问的三种方法
Dec 09 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
Dec 14 Javascript
Bootstrap模态框(Modal)实现过渡效果
Mar 17 Javascript
详解如何在Angular中快速定位DOM元素
May 17 Javascript
vue+element实现打印页面功能
May 20 Javascript
微信小程序实现类似微信点击语音播放效果
Mar 30 Javascript
JS函数进阶之继承用法实例分析
Jan 15 Javascript
jQuery实现异步上传一个或多个文件
Aug 17 jQuery
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
用Flash图形化数据(一)
2006/10/09 PHP
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
Python之自动获取公网IP的实例讲解
2017/10/01 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
深入了解Django View(视图系统)
2019/07/23 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
运动会表扬稿大全
2014/01/16 职场文书
大学生校园创业计划书
2014/02/08 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
布达拉宫导游词
2015/02/02 职场文书
开票证明
2015/06/23 职场文书
怎么用Python识别手势数字
2021/06/07 Python