欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JQuery 三级联动

程序员文章站 2024-03-05 15:22:31
...

1、首先要写一个jps代码片段:这里给它取名为 link_chain.jsp

<%@page pageEncoding="utf-8"%>
<select class="form-control" id="select_1" name="select1" >
</select>
<select class="form-control" id="select_2" name="select2" >
    <option value="0">请选择</option>
</select>
<select class="form-control" id="select_3" name="select3" >
    <option value="0">请选择</option>
</select>

2、然后再写一个js脚本:命名为:link_chain.js

$.fn.linkselect = function (options) {
    var select = $(this);
    var url = options.url;//获取数据的链接
    var value = options.value;//初始化需要选中的数据
    var parentId = options.parentId;//初始化需要选中的数据
    var depth = options.depth;//层级,默认为3

    $.post(url, {"parentId": parentId}, function (result) {
        select.find("option").remove();
        select.append("<option value=''>请选择</option>");

        var array = [];
        var mySel = select.attr("id");
        if (mySel != undefined) {
            array = mySel.split("_");
        }
        var index = parseInt(array[1]) - 1;
        for (i in result) {
            var obj = result[i];
            var id = obj.id;
            var name = obj.name;

            if (id == value[index]) {
                select.append("<option value=" + id + " selected>" + name + "</option>");
            } else {
                select.append("<option value=" + id + " >" + name + "</option>");
            }
        }
        //onchange事件,改变后面select的值
        select.change(function () {
            var thisId = $(this).attr("id").split("_");
            var nextId = parseInt(thisId[1]) + 1;
            var next = $("#" + thisId[0] + "_" + nextId);

            //选项改变,清空后面下拉框
            if (depth == undefined) {
                depth = 3;
            }
            for (var childPos = parseInt(thisId[1]) + 1; childPos <= depth; childPos++) {
                var child = $("#" + thisId[0] + "_" + childPos);
                if (child != undefined) {
                    child.find("option").remove();
                    child.append("<option value=''>请选择</option>");
                }
            }

            var selectedValue = $(this).val();
            if (next && selectedValue) {
                next.linkselect({
                    url: url,
                    value: value,
                    parentId: selectedValue
                });
            }
        });
        //设置后面select的值
        select.change();
    });
};

3、在link_chain.jsp中引入这个js:

<script type="text/javascript" src="<%=request.getContextPath()%>/resources/js/link_chain.js"></script>

4、接下来就可以将这个jsp文件直接放在需要使用联动插件的地方了:

<%@ include file="/common/link_select.jsp" %>

5、一般下拉框都会有个初始值,在当前引入link_select.jsp的页面做一些初始化工作:

<script>
$(function () {
        //页面加载完成后执行
        document.onreadystatechange = function () {
            if (document.readyState == "complete") {              
                initData();
            }
        };
		function initData() {
			 var value = [];
			 value.push('${data1}');
			 value.push('${data2}');
			 value.push('${data3}');
			  $("#select_1").linkselect({
                url: basePath + '/data',                
                value: value,
                parentId: ""
            });
		};
});
</script>

6、最后的最后,贴下请求的数据返回值的数据结构:(它和一般的省市级三级联动的数据结构不太一样)

JQuery 三级联动

其实原博主已经写的很详细了,只是我拿来用时候发现不适合,故在此记录下以便后面用到时候过来复习。里面的递归调用并没有完全理解,目前这个改动,除了适合3级联动,在value和path处稍作修改,也适合N级联动。 

原博主文章出处:https://blog.csdn.net/dwl0208/article/details/82716112

上一篇: Jquery入门一

下一篇: Java之IO流