浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)

简介:

浏览器前进后退对下拉框数据的丢失的问题,典型的为省市下拉框联动时城市数据的丢失。省市联动一般的实现为城市在省份的选择后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,如需转载请自行联系原作者

相关文章
|
7月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
7月前
|
数据采集 Web App开发 JSON
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
本文以百度为实战案例演示使用WebScraper插件抓取页面内容保存到文件中。以及WebScraper用法【2月更文挑战第1天】
527 2
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
|
7月前
|
存储 算法 Java
8.栈实现浏览器的前进后退
8.栈实现浏览器的前进后退
81 4
|
2月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
4月前
|
Web App开发 JSON 数据格式
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
|
7月前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
84 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
|
4月前
|
JavaScript
js怎样控制浏览器前进、后退、页面跳转
js怎样控制浏览器前进、后退、页面跳转
66 0
|
6月前
|
Web App开发 JSON 数据格式
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
Access to XMLHttpRequest at 'file:///C:/Users/.../failedrequests.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome-untrusted, https, edge. reportdata/failedrequests.json:1 Fail
|
6月前
|
安全 前端开发 JavaScript
CORS是W3C标准,解决浏览器同源策略限制的跨域数据访问。
【6月更文挑战第27天】CORS是W3C标准,解决浏览器同源策略限制的跨域数据访问。它通过服务器在HTTP响应头添加`Access-Control-Allow-*`字段允许特定源请求。简单请求无需预检,非简单请求会发OPTIONS预检请求。服务器配置CORS策略,客户端正常请求,浏览器自动处理。若未正确配置,浏览器将阻止响应,保障安全。
77 0
|
6月前
|
存储 算法 Java
栈:如何实现浏览器的前进和后退功能?
这篇文章讨论了计算机科学中的栈数据结构及其在浏览器前进、后退功能、函数调用、表达式求值和括号匹配等场景中的应用。栈是一种后进先出(LIFO)的数据结构,通常由数组或链表实现,具有入栈(添加元素)和出栈(移除最近添加的元素)的基本操作,时间复杂度为O(1)。文章通过实例解释了如何用栈来实现浏览器的前进和后退功能,以及在解析和求解数学表达式时如何利用栈来处理括号匹配。此外,还提到了栈在函数调用中的作用,即保存临时变量和管理调用顺序。文章以两个栈为例,详细描述了如何跟踪已浏览的网页历史记录,以便实现前进和后退功能。