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 相关文章推荐
JavaScript 常用函数库详解
Oct 21 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
Aug 14 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
将json对象转换为字符串的方法
Feb 20 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
Jan 08 Javascript
浅析js绑定事件的常用方法
May 15 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
jQuery实现的回车触发按钮事件功能示例
Mar 25 jQuery
Js面试算法详解
Apr 08 Javascript
vue-列表下详情的展开与折叠案例
Jul 28 Javascript
手把手教你实现 Promise的使用方法
Sep 02 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
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
python随机取list中的元素方法
2018/04/08 Python
Python基础之文件读取的讲解
2019/02/16 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
详解Python文件修改的两种方式
2019/08/22 Python
Django配置文件代码说明
2019/12/04 Python
如何解决python多种版本冲突问题
2020/10/13 Python
Pandas的数据过滤实现
2021/01/15 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
银行进社区活动总结
2014/07/07 职场文书
新兵入伍心得体会
2014/09/04 职场文书
婚礼父母答谢词
2015/01/04 职场文书
党员个人总结范文
2015/02/14 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
详解Python常用的魔法方法
2021/06/03 Python
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL