博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)
阅读量:6985 次
发布时间:2019-06-27

本文共 1867 字,大约阅读时间需要 6 分钟。

浏览器前进后退对下拉框数据的丢失的问题,典型的为省市下拉框联动时城市数据的丢失。省市联动一般的实现为城市在省份的选择后js加载。

那么每次城市的改变只需要重新加载新的城市数据并更新下拉框即可:

下拉函数

function 
ReloadCities() {
    
var 
$ddlCity = $(
"#CityId"
);
    
var 
selec = $(
"#ProvinceId"
).val();
    
if 
(selec) {
        
$ddlCity.find(
"option"
).remove();
        
var 
url =
"@(Url.Action("
CityListByProvinceId
", "
Common
", new { area = "
Default
" }))"
;
        
$.post(url, {
'id'
: selec },
function 
(data) {
            
$.each(data,
function 
(i, item) {
                
$(
"<option></option>"
).val(item.AddressId).text(item.AddressName).appendTo($ddlCity);
            
});
        
},
"json"
);
    
}
    
else 
{
        
$ddlCity.find(
"option"
).remove();
        
$(
"<option></option>"
).val(
""
).text(
"--请选择--"
).appendTo($ddlCity);
    
}
}

 正常使用没有问题,但是当用户跳转到其它页面再回退时选中丢失。关于回退普及下面几个关键的知识点:

  1. 一般都会自动使用缓存的数据,除非禁用缓存才会重新从服务端获取数据。
  2. 大部分浏览器在默认设置下都会保存每个元素的value,也就是用户输入的数据。
  3. 具体的知识可以查看widnow对象的history。

知道了以上几点后,首先,为什么城市列表会丢失,因为它是js操作dom的结果,所以增加触发代码:

触发代码

$(document).ready(
function 
() {
            
if 
(!$(
"#CityId"
).val()) {
                
ReloadCities();
            
}});

城市是加载出来了,但是选中的状态丢了。怎么办呢,抱着绕开这个复杂的城市元素的思路,直接放个隐藏的input来保存前后的value,那么解决方案就出来了。

同步隐藏input的代码

$(
"#CityId"
).change(
function 
() {
                
$(
"#cityIdHidden"
).val($(
"#CityId"
).val());
            
});

 在重新加载城市列表时从隐藏input中获取value值,新代码为红色段

function 
ReloadCities() {
           
var 
$ddlCity = $(
"#CityId"
);
           
var 
selec = $(
"#ProvinceId"
).val();
           
if 
(selec) {
               
$ddlCity.find(
"option"
).remove();
               
var 
url =
"@(Url.Action("
CityListByProvinceId
", "
Common
", new { area = "
Default
" }))"
;
               
$.post(url, {
'id'
: selec },
function 
(data) {
                   
$.each(data,
function 
(i, item) {
                       
$(
"<option></option>"
).val(item.AddressId).text(item.AddressName).appendTo($ddlCity);
                   
});
                   
if 
($(
"#cityIdHidden"
).val()) {
                       
$(
"#CityId"
).val($(
"#cityIdHidden"
).val());
                   
}
               
},
"json"
);
           
}
           
else 
{
               
$ddlCity.find(
"option"
).remove();
               
$(
"<option></option>"
).val(
""
).text(
"--请选择--"
).appendTo($ddlCity);
           
}
       
}

都搞定。

 

本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/p/3184462.html,如需转载请自行联系原作者

你可能感兴趣的文章
Ossim系统常见测试方法
查看>>
创业那些年,我们一起走过的坑
查看>>
Oracle软件的美学变迁
查看>>
HttpServlet中getAllDeclaredMethods()方法
查看>>
面试题2:二维数组中的查找
查看>>
文件上传的渐进式增强
查看>>
leetcode -- Sort Colors
查看>>
C#中使用自定义的纸张大小
查看>>
1z0-052 q209_3
查看>>
行测题哦
查看>>
JavaScript Window Navigator 浏览器本身的信息
查看>>
使用Android Ant在编译时混淆
查看>>
通过Servlet 将服务器硬盘图片 展示到浏览器
查看>>
linux_nand_driver
查看>>
语义化的软件版本号规则,你是否真的了解软件的版本号
查看>>
[通俗易懂]理解“委托”
查看>>
sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)...
查看>>
xocodebulid 自动化打包 解决提示 ld: library not found for -lPods 问题
查看>>
LPEG
查看>>
python none,null,,,,,类型
查看>>