jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态


Posted in Javascript onOctober 29, 2013

功能:省,市,地区三级联动,采用jquery ajax 取数据绑定,页面刷新或提交后选定值能保存并保持选中状态

把以下代码放在一个单独的js文件中,在页面上引用即可调用

//获取cookie值
function readCookie(name) {
    var cookieValue = "";
    var search = name + "=";
    if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = document.cookie.indexOf(";", offset);
            if (end == -1) end = document.cookie.length;
            cookieValue = unescape(document.cookie.substring(offset, end))
        }
    }

    return cookieValue;
}
//保存cookie值
function writeCookie(name, value, hours, escp) {
    var expire = "";
    if (hours != null) {
        expire = new Date((new Date()).getTime() + hours * 3600000);
        expire = "; expires=" + expire.toGMTString();
    }
    if (escp == "True") {
        document.cookie = name + "=" + value + expire;
    } else {
        document.cookie = name + "=" + escape(value) + expire;
    }
}
//省市区,流域,水系,断面条件选择
$(function() {
    var $ddlprovince = $("#ddlProvince");     //省份
    var $ddlcity = $("#ddlCity");      //城市
    var $ddlarea = $("#ddlAreaName");         //区域

    //根据省份查询城市
    //$ddlprovince.focus(); //不要加focus,否则设置selected有问题
    $ddlprovince.bind("change keyup", function() {
        if ($(this).val() != "-1") {
            loadWater($(this).val(), "SelectCity");
        } else {
            $("select[id$=ddlCity] > option").remove();
            $ddlcity.append($("<option></option>").val("-1").html("--请选择--"));
        }
        //从新选择省份或者从新选择城市都会初始化区域
        $("select[id$=ddlAreaName] > option").remove();
        $ddlarea.append($("<option></option>").val("-1").html("--请选择--"));
    });

    //如果城市没有填充数据,省份有选择数据则加载数据
    if ($("select[id$=ddlCity] > option").length == 1 && $ddlprovince.val() != "-1") {

        loadWater($ddlprovince.val(), "SelectCity");
        //读cookie,有值则设为选中状态
        var cityname = readCookie("JQ_CityName");
        if (cityname != null && cityname != "undefined" && cityname != "") {

            //$("select[id=ddlWaterXiName] > option:contains('" + watername + "')").attr("selected", "true");
            $("select[id$=ddlCity] > option[value='" + cityname + "']").attr("selected", "true");
        }
    }
    //根据城市查询区域
    //$ddlcity.focus();
    $ddlcity.bind("change keyup", function() {
        if ($(this).val() != "-1") {
            loadWater($(this).val(), "SelectAreaName");
            //选中值存cookie
            writeCookie("JQ_CityName", $(this).val(), 0.5, true);
        } else {
            $("select[name$=ddlAreaName] > option").remove();
            $ddlarea.append($("<option></option>").val("-1").html("--请选择--"));
        }
    });

    //如果区名没有填充数据,城市有选择数据则加载数据
    if ($("select[id$=ddlAreaName] > option").length == 1 && $ddlcity.val() != "-1") {
        loadWater($ddlcity.val(), "SelectAreaName");
        //读cookie,有值则设为选中状态
        var areaname = readCookie("JQ_AreaName");
        if (areaname != null && areaname != "undefined" && areaname != "") {
            $("select[id=ddlAreaName] > option[value='" + areaname + "']").attr("selected", "true");
        }
    }
    $ddlarea.bind("change keyup", function() {
        if ($(this).val() != "-1") {
            //选中值存cookie
            writeCookie("JQ_AreaName", $(this).val(), 0.5, true);
        }
    });
});
function loadWater(selectedItem, typename) {
    $.ajax({
        type: "GET",
        url: "/GetWaterxiname.ashx",
        data: { usetype: typename, id: selectedItem },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function Success(data) {
            bindWater(data, typename);
        }
    });
}
function bindWater(data, typename) {
    if (typename == "SelectCity") {    //绑定城市
        $("select[name$=ddlCity] > option").remove(); //删除原有的option
        $("select[id$=ddlCity]").append($("<option></option>").val("-1").html("--请选择--"));

        for (var i = 0; i < data.length; i++) {
            $("select[id$=ddlCity]").append($("<option></option>").val(data[i].City).html(data[i].City));
        }
    }
    else if (typename == "SelectAreaName") {
        $("select[name$=ddlAreaName] > option").remove(); //删除原有的option
        $("select[id$=ddlAreaName]").append($("<option></option>").val("-1").html("--请选择--"));

        for (var i = 0; i < data.length; i++) {
            $("select[id$=ddlAreaName]").append($("<option></option>").val(data[i].AreaName).html(data[i].AreaName));
        }
    }
}

说明:省份数据在页面加载时绑定,页面提交后 省份值可以用 selectvalue取,市,区选中数据要用 Request["idname"] 获取
Javascript 相关文章推荐
取键盘键位ASCII码的网页
Jul 30 Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
javascript同页面多次调用弹出层具体实例代码
Aug 16 Javascript
JavaScript创建对象的写法
Aug 29 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
javascript加载xml 并解析各节点的值(实现方法)
Oct 12 Javascript
JS图片轮播与索引变色功能实例详解
Jul 06 Javascript
vue.js语法及常用指令
Oct 29 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
Feb 28 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
VueCli生产环境打包部署跨域失败的解决
Nov 13 Javascript
JavaScript 语句之常用 for 循环详解
Mar 29 Javascript
JS 页面计时器示例代码
Oct 28 #Javascript
js如何判断不同系统的浏览器类型
Oct 28 #Javascript
使用js的replace()方法查找字符示例代码
Oct 28 #Javascript
js中的replace方法使用介绍
Oct 28 #Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 #Javascript
javascript抖动元素的小例子
Oct 28 #Javascript
replace()方法查找字符使用示例
Oct 28 #Javascript
You might like
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
php测试kafka项目示例
2020/02/06 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
浅谈Python实现2种文件复制的方法
2018/01/19 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
利用Python计算KS的实例详解
2020/03/03 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
苹果音乐订阅:Apple Music
2018/08/02 全球购物
网络安全方面的面试题
2016/01/07 面试题
毕业自我评价
2014/02/05 职场文书
《夏夜多美》教学反思
2014/02/17 职场文书
《口技》教学反思
2014/02/21 职场文书
小学中等生评语
2014/12/29 职场文书
行政复议决定书
2015/06/24 职场文书
银行培训心得体会范文
2016/01/09 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP