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 相关文章推荐
jquery easyui的tabs使用时的问题
Mar 23 Javascript
用js来解决ajax读取页面乱码
Nov 28 Javascript
JavaScript对象数组排序函数及六个用法
Dec 23 Javascript
详解iframe与frame的区别
Jan 13 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
Jul 07 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
Jun 09 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
js实现的格式化数字和金额功能简单示例
Jul 30 Javascript
微信小程序实现页面分享onShareAppMessage
Aug 12 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
May 27 Javascript
探索浏览器页面关闭window.close()的使用详解
Aug 21 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 开发环境配置(Zend Server安装)
2010/04/28 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
php实现微信发红包功能
2018/07/13 PHP
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
Python中实现常量(Const)功能
2015/01/28 Python
Python中有趣在__call__函数
2015/06/21 Python
简单实现python画圆功能
2018/01/25 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
车间工艺员岗位职责
2013/12/09 职场文书
校园安全教育广播稿
2014/02/17 职场文书
投标承诺书范本
2014/03/27 职场文书
2014年保育员工作总结
2014/12/02 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
挂靠协议书
2015/01/27 职场文书
学校计划生育责任书
2015/05/09 职场文书
2016年元旦寄语
2015/08/17 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
Python实现单例模式的5种方法
2021/06/15 Python
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技