使用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 相关文章推荐
ExtJS扩展 垂直tabLayout实现代码
Jun 21 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
jquery ajax双击div可直接修改div中的内容
Mar 04 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
Sep 27 Javascript
关于node-bindings无法在Electron中使用的解决办法
Dec 18 Javascript
vue 授权获取微信openId操作
Nov 13 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
Jan 26 Javascript
手把手教你从零开始react+antd搭建项目
Jun 03 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
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
python读取注册表中值的方法
2013/04/08 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
python实现飞机大战游戏
2020/10/26 Python
Python将string转换到float的实例方法
2019/07/29 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
python 日志 logging模块详细解析
2020/03/31 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
校园环保建议书
2014/05/14 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
Python实现归一化算法详情
2022/03/18 Python
如何在Python中妥善使用进度条详解
2022/04/05 Python