• js 多级联动(省、市、区)


    js 多级联动(省、市、区)

    CreateTime--2018年4月9日17:10:38

    Author:Marydon

    方式一:

      数据从数据库获取,ajax实现局部刷新

    方式二:

      数据从json文件获取,ajax实现局部刷新

    以方式二为例,进行演示(省市区三级联动)

    前提:需要有省、市、区三个的数据封装文件

    代码实现

      1.自封装函数

    /**
     * 多级联动
     */
    function MultipleCascades() {
        
        var containerId = "";
        var num = "";
        var textArray = "";
        
        // 参数初始化
        this.init = function(initParams) {
            if (!initParams) return;
            
            containerId = initParams['containerId'];
            num = initParams['selectNum'];
            textArray = initParams['textDescraption'];
            
            for (var i = 1; i <= num; i++) {
                var selectId = "linkage" + i;
                this.selectFactory(selectId,textArray[i-1]);
            }
        };
        
        // 创建select标签
        this.selectFactory = function(id,text) {
            // 创建文本提示
            var spanElement = document.createElement('span');
            spanElement.className = "textBox";
            spanElement.innerHTML = text;
            $('#' + containerId).append(spanElement);
            
            // 创建select标签
            var selectElement = document.createElement('select');
            selectElement.id = id;
            selectElement.className = "selectStyle";
            // 给select标签填充空的option标签
            var optionElement = document.createElement('option');
            optionElement.value = "";
            optionElement.innerHTML = "--请选择--";
            selectElement.appendChild(optionElement);
            
            $('#' + containerId).append(selectElement);
        };
        
        // select标签绑定onchange事件
        this.bindChangeEvent = function(selectId,setData) {
            
            $('#' + selectId).change(function () {
                var j = parseInt(selectId.substring(7)) + 1;
                // 将本select标签和它后面的联动标签移除掉
                for (;j <= num; j++) {
                    $('#linkage' + j + ' option:gt(0)').remove();
                }
                
                var selectValue = $('#' + selectId).val();
                if (!selectValue) return;
                setData();
            });
            
        }           
    };

      HTML片段

    <div id="selectContainer"></div>

      2.调用

      方法一:

    $(function(){
        var mc = new MultipleCascades();
        mc.init({
            'containerId':'selectContainer',
            'selectNum':3,
            'textDescraption':['省:','市:','区:']
        });
        
         // 2.获取省份信息
        $.getJSON("json/province.json",function(provinces){
            var optionTags = "";
            $(provinces).each(function(index,obj){
                optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
            });
            $('#linkage1').append(optionTags);
        });
         
         
         mc.bindChangeEvent('linkage1',function(){
             
             var provinceId = $('#linkage1').val();
             // 获取城市信息
            $.getJSON("json/city.json",function(cities){
                var optionTags = "";
                
                $(cities[provinceId]).each(function(index,obj){
                    optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
                });
                $('#linkage2').append(optionTags);
            });
         });
         
         mc.bindChangeEvent('linkage2',function(){
             var cityId = $('#linkage2').val();
             // 获取区(县)信息
            $.getJSON("json/area.json",function(areas){
                var optionTags = "";
                areas[cityId].forEach(function(obj){
                    optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";    
                });
                $('#linkage3').append(optionTags);
            });
         });
        
        
    });

      方法二:

    $(function(){
        var mc = new MultipleCascades();
        mc.init({
            'containerId':'selectContainer',
            'selectNum':3,
            'textDescraption':['省:','市:','区:']
        });
        
         // 2.获取省份信息
        $.getJSON("json/province.json",function(provinces){
            var optionTags = "";
            $(provinces).each(function(index,obj){
                optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
            });
            $('#linkage1').append(optionTags);
        });
         
         // 绑定onchange事件
        $('#linkage1').change(function(){
            // 1.移除市和区的下拉选项
            $('#linkage2 option:gt(0)').remove();
            $('#linkage3 option:gt(0)').remove();
            var provinceId = $(this).val();
            if (!provinceId) return;
            // 2.获取城市信息
            $.getJSON("json/city.json",function(cities){
                var optionTags = "";
                $(cities[provinceId]).each(function(index,obj){
                    optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
                });
                $('#linkage2').append(optionTags);
            });
            
        });
        $('#linkage2').change(function(){
            $('#linkage3 option:gt(0)').remove();
            var cityId = $(this).val();
            if (!cityId) return;
            // 获取区(县)信息
            $.getJSON("json/area.json",function(areas){
                var optionTags = "";
                areas[cityId].forEach(function(obj){
                    optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";    
                });
                $('#linkage3').append(optionTags);
            });
        });
        
    }); 

    区别:在于方法一又对onchange事件进行了封装。

    效果展示:

    说明:

      1.使用我封装好的方法,具有良好的迁移性,操作简单,只需要在页面上放一个带有ID的div即可;

      2.可创建指定级别联动;

      3.select标签及前面的文字都设置了class,可自定义设置CSS样式;

      4.其他实现方式已经写好。

     相关推荐:

       类似文章

  • 相关阅读:
    Objects类源码详解(基于jdk1.8.0_261)
    Object类源码详解(基于jdk1.8.0_261)
    Collections工具类源码详解(基于jdk1.8.0_261)
    版本控制神器——git的基本使用
    数据结构练习1~插入排序~
    求指错啊急是求幂的
    编完了个代码大家给看看还能不能精简
    关于KMP算法
    有网友建议写一个新手指南或者FAQ一类的置顶你们认为呢
    c语言新手编程错误求解
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/8761660.html
Copyright © 2020-2023  润新知