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 相关文章推荐
asp 的 分词实现代码
May 24 Javascript
原生js和jquery中有关透明度设置的相关问题
Jan 08 Javascript
JavaScript匿名函数与委托使用示例
Jul 22 Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 Javascript
JavaScript中用toString()方法返回时间为字符串
Jun 12 Javascript
AngularJS使用ngMessages进行表单验证
Dec 27 Javascript
Angularjs 设置全局变量的方法总结
Oct 20 Javascript
ES6学习教程之块级作用域详解
Oct 09 Javascript
vue修改对象的属性值后页面不重新渲染的实例
Aug 09 Javascript
基于element-ui组件手动实现单选和上传功能
Dec 06 Javascript
Vue动态生成表格的行和列
Jul 18 Javascript
vue基于Teleport实现Modal组件
May 31 Vue.js
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中文分词的简单实现代码分享
2011/07/17 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
详解python itertools功能
2020/02/07 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
PyTorch中的C++扩展实现
2020/04/02 Python
is_file和file_exists效率比较
2021/03/14 PHP
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
关于母亲节的感言
2014/02/04 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
2014年党员整改措施
2014/10/24 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书