前些天,做网站用需要用到一个省市县的三级联动,数据要从数据库里面读取,我想了下思路,动手写了下来。

   一、思路

          js利用Ajax读取控制器里面的函数,利用函数读取存储过程,返回json。利用JS处理Json构建数组,利用索引加载到下拉菜单中

 

     二、具体实现

          1、数据库的设计(数据是提前设计好的,只能对现有的数据库进行编写)



编写存储过程如下SQL:

 ALTER PROCEDURE [dbo].[getstatisticProvince]
 AS BEGIN
 SELECT RegionCode ,Province,CITY,TOWN FROM [dbo].[Region]
 END

       

     2、调用存储过程这里省略

    3、前台页面(页面的ID要和Js里面的Id值对应)

          <tr>
                               <th>
                    <label class="col-lg-3 control-label">所在省:</label>
                </th>
                <th>
                    <select class="form-control input-sm" id="sProvince" name="sProvince">
                    </select>
                </th>

                <th>
                    <label class="col-lg-3 control-label">所在市:</label>
                </th>
                <th>
                    <select class="form-control input-sm" id="sCity" name="sCity">
                    </select>
                </th>

                <th>
                    <label class="col-lg-3 control-label">所在区:</label>
                </th>
                <th>
                    <select class="form-control input-sm" id="sTown" name="sTown">
                    </select>
                </th>
                   <th>
                    <input type="text" id="txtregion" style="display: none" name="RegionCode"/>
                </th>
            </tr>



    4、js处理代码

    

function Dsy() {
    this.Items = {};
}

var temp = new Dsy();
Dsy.prototype.add = function (id, iArray) {
    if (iArray["Province"] != "") {

    if (this.Exists(id)) {
        this.Items[id] = this.Items[id] + "," + JSON.stringify(iArray);
    } else {
        this.Items[id] = JSON.stringify(iArray);
    }
    }
};
Dsy.prototype.Exists = function(id) {
    if (typeof(this.Items[id]) == "undefined") return false;
    return true;
};

function change(v) {
    var str = "province";
    for (i = 0; i < v; i++) {
        str = document.getElementById(s[i])[document.getElementById(s[i]).selectedIndex].text;
    }
    var ss = document.getElementById(s[v]);

    with (ss) {
        length = 0;
        options[0] = new Option(opt0[v], '3537');//添加空时的ID
        if (v == 1) {
            options[0] = new Option(opt0[v], document.getElementById(s[0])[document.getElementById(s[0]).selectedIndex].value);
        }
      else  if (v == 2) {
            options[0] = new Option(opt0[v], document.getElementById(s[1])[document.getElementById(s[1]).selectedIndex].value);
        }
        if (v && document.getElementById(s[v - 1]).selectedIndex > 0 || !v) {
            if (dsy.Exists(str)) {
                ar = eval("["+dsy.Items[str]+"]");
                for (i = 0; i < ar.length; i++) {
                    if (v == 0) {
                        options[length] = new Option(ar[i]["Province"], ar[i]["RegionCode"]);
                    }
                    else if (v == 1) {
                        if (ar[i]["CITY"] != document.getElementById(s[1])[document.getElementById(s[1]).length-1].text) {
                             options[length] = new Option(ar[i]["CITY"], ar[i]["RegionCode"]);
                        }
                    } else {
                        if (ar[i]["TOWN"]!="")
                        options[length] = new Option(ar[i]["TOWN"], ar[i]["RegionCode"]);
                    }

                }

                if (v)options[0].selected = true;
            }
        }
        if (++v < s.length) {change(v);}
    }
}

var dsy = new Dsy();

var s = ["sProvince", "sCity", "sTown"];//id对应到前台页面
var opt0 = ["省份", "地级市", "市、县级市、县"];

function SetDsy(code) {
    var province;
    $.ajax({
        url: '/JobInfo/GetJson',//目标路径函数
        type: 'GET',
        dataType: 'json',
        timeout: 10000,
        cache: false,
        success: function (data) {
            province = eval(data);
            for (i = 0; i < province.length; i++) {
                if ((province[i]["CITY"] == "" || province[i]["CITY"] == null) && (province[i]["TOWN"] == "" || province[i]["TOWN"] == null) && province[i]["Province"]!=null) {
                    dsy.add("province", province[i]);
                } else if (province[i]["TOWN"] == "") {
                    dsy.add(province[i]["Province"], province[i]);
                } else {
                    dsy.add(province[i]["CITY"], province[i]);
                }
            }
            //dsy.add("province", rPro);

            for (i = 0; i < s.length - 1; i++) {
                SetEvent(i);
                document.getElementById(s[i]).onchange = new Function("change(" + (i + 1) + ");");
            }
            SetEvent(2);
            change(0);
            if (code != "") {
                GetIndex(code);
            }

        }
    });

}
function SetEvent(i) {
    $("#"+s[i]).change(function () {
        $("#txtregion").val(this.value);

    });
}
 //修改时候选择当前ID下面对应的值
function GetIndex(code) {
    $.ajax({
        url: '/JobInfo/GetQuery',
        type: 'GET',
        data: { code: code },//$("#txtregion").val(),
        dataType: 'json',
        timeout: 10000,
        cache: false,
        success: function(data) {
            var Pro = eval("[" + dsy.Items["province"] + "]");
            for (i = 0; i < Pro.length; i++) {
                if (Pro[i]["Province"] == data[0]["Province"]) {
                    $("#" + s[0])[0][i + 1].selected = true;
                    change(1);
                    break;
                }

            }
            var city = eval("[" + dsy.Items[data[0]["Province"]] + "]");
            for (i = 0; i < city.length; i++) {
                if (city[i]["CITY"] == data[0]["CITY"]) {
                    $("#" + s[1])[0][i + 1].selected = true;
                    change(2);
                    break;
                }
            }

            var town = eval("[" + dsy.Items[data[0]["CITY"]] + "]");
            for (i = 0; i < town.length; i++) {
                if (town[i]["TOWN"] == data[0]["TOWN"]) {
                    $("#" + s[2])[0][i + 1].selected = true;

                    break;
                }

            }
        }
    });
}

新手发帖,多多关照,有兴趣加群



   IT项目 
324110381



第八篇 一个用JS写的省市县三级联动的更多相关文章

  1. js实现的省市县三级联动的最新源码

    <!DOCTYPE html> <html> <head> <title>省市区三级联动</title> <!-- 直接使用QQ的省市 ...

  2. 省市县三级联动js代码

    省市县三级联动菜单,JS全国省市县(区)联动代码,一般可以用于用户注册或分类信息二手交易网站,需要的朋友直接复制代码就可以用了,不过有朋友反馈说缺少某些城市,具体缺少哪个尚不知,请想用的朋友自己补全吧 ...

  3. 第二十八篇:关于node.js连接数据库

    好家伙,这个不难,但是也不简单. $ cnpm install mysql 教程里是带美元符的,但是我打的时候加上美元符用不了,所以我就没用美元符了,一样能行. 还有,淘宝镜像,yyds, var m ...

  4. 移动端纯原生JS不依赖ajax后台服务器实现省市县三级联动

    最近好多天没有更新文章,是因为公司的项目忙的不行.今天有点时间,就突然想起在移动端项目中遇到三级联动的问题,网上查了很多资料,都是依赖各种插件,或者晦涩难于理解.于是,自己决定写一个出来. 当然,没有 ...

  5. 一个用js写的接口http调试程序

    公司有非常多手机app的项目.手机app又要常常訪问后台提交与查询数据. 所曾经端app与后台的开发与測试过程中接口调试是一个常常要做的工作. 而每当出现一个BUG,前端appproject师与后台p ...

  6. 一个原生js写的加减乘除运算

    根据我的经验我说的再多也没人看,不过还是简单介绍下效果吧,可以选择+,-,*,/,去计算数据,喜欢的话就粘贴复制自己看去吧! <!DOCTYPE html PUBLIC "-//W3C ...

  7. JS 省市县三级联动

    $(".area").change(function(ent,arg){ var $this = $(this), level = $(this).attr("id&qu ...

  8. 用jquery写的json省市县三级联动下拉

    <form action="#" name="myform"> <label>省</label><select nam ...

  9. 使用php ajax写省、市、区、三级联动

    题目要求: 要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下拉跟着变化,市级下拉变化时区下拉跟着变化. 使用china ...

随机推荐

  1. Vue 响应式总结

    有些时候,不得不想添加.修改数组和对象的值,但是直接添加.修改后getter.setter又失去了. 由于 JavaScript 的限制, Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项 ...

  2. CentOS下架设VNC服务器

    CentOS下架设VNC服务器1.什么是VNC服务器?百度百科:VNC (Virtual Network Computer)是虚拟网络计算机的缩写.它 是一款优秀的远程控制工具软件,由著名的 AT&a ...

  3. 我对CSS中的BFC的理解

       1.什么是BFC 其实在老师让我们写这篇叫BFC的时候,我跟本不知道有什么BFC的东西. 后来,我找了一些资料,知道了,BFC是Block Formatting Context (块级格式化上下 ...

  4. 用控制台命令拉取git最新仓库代码

    C#利用Diagnostics  拉取最新代码  示例代码 static void DiagnosticTest() { Process p; ProcessStartInfo psi; psi = ...

  5. 用php 进行对文件的操作 (下)

    继续来说文件操作 新建一个文件夹或是删除一个文件夹,并不是只有右击一种方法,还可以用代码来操作 先来看没有运行代码之前的目录下有哪些文件 点击运行代码后再来看有没有增加名为aa的文件夹 添加成功 再来 ...

  6. (汉化改进作品)BruteXSS:Xss漏洞扫描脚本

    今天给大家进行汉化改进的事一款脚本工具:BruteXSS,这款脚本能自动进行插入XSS,而且可以自定义攻击载荷. 该脚本也同时提供包含了一些绕过各种WAF(Web应用防护系统)的语句.   0×01简 ...

  7. CSS3中字体平滑处理和抗锯齿渲染

    在围观Drupal官方主题的时候,发现了一个有意思的非标准CSS选择器-webkit-font-smoothing,于是上手把玩了一番.如何使用css3字体平滑显示呢 要知道,W3C对CSS中字体的抗 ...

  8. 三分钟解读springmvc依赖

    长期以来都在写SSM框架的项目,却未能深入理解框架的搭建原理,而只是浅薄的理解前辈的架构,然后不断套用,项目做过几个,但框架的内涵却没有把握.小编打算今天从SpringMVC的依赖分析做起,一步步进行 ...

  9. [html5] 学习笔记-html5增强的页面元素

    在 HTML5 中,不仅增加了很多表单中的元素,同时也增加和改良了可以应用在整个页面中的元素.重点包含 figure.figcaption.details.summary.mark.progress. ...

  10. C#npoi导出excel一些自己的看法

    之前转过一篇类似的文章,那个是用C#自带的excel类操作Excel的,还有一种在c#上操作excel的方法便是npoi了,npoi是poi的C#版本. npoi操作excel有两种形式,一种是hss ...