浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)
2013-07-11 17:49
295 查看
浏览器前进后退对下拉框数据的丢失的问题,典型的为省市下拉框联动时城市数据的丢失。省市联动一般的实现为城市在省份的选择后js加载。
那么每次城市的改变只需要重新加载新的城市数据并更新下拉框即可:
下拉函数
正常使用没有问题,但是当用户跳转到其它页面再回退时选中丢失。关于回退普及下面几个关键的知识点:
一般都会自动使用缓存的数据,除非禁用缓存才会重新从服务端获取数据。
大部分浏览器在默认设置下都会保存每个元素的value,也就是用户输入的数据。
具体的知识可以查看widnow对象的history。
知道了以上几点后,首先,为什么城市列表会丢失,因为它是js操作dom的结果,所以增加触发代码:
触发代码
城市是加载出来了,但是选中的状态丢了。怎么办呢,抱着绕开这个复杂的城市元素的思路,直接放个隐藏的input来保存前后的value,那么解决方案就出来了。
同步隐藏input的代码
在重新加载城市列表时从隐藏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); }); }, "json"); } else { $ddlCity.find("option").remove(); $("<option></option>").val("").text("--请选择--").appendTo($ddlCity); } }
正常使用没有问题,但是当用户跳转到其它页面再回退时选中丢失。关于回退普及下面几个关键的知识点:
一般都会自动使用缓存的数据,除非禁用缓存才会重新从服务端获取数据。
大部分浏览器在默认设置下都会保存每个元素的value,也就是用户输入的数据。
具体的知识可以查看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); } }
都搞定。
相关文章推荐
- 用回调实现的省市县区四级下拉选择联动的例子
- 一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
- 一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
- 实现jsp页面二级下拉框联动,实时读取数据库数据
- location的hash部分和使用window.onhashchange实现ajax请求内容时使用浏览器后退和前进功能
- JavaScript(JS)实现省市联动选择下拉列表
- 计算机学院研发第二轮考核-------浏览器之实现(前进、后退、刷新)
- 浏览器菜单命令的实现--打开、打印、前进、另存为、后退等命令的实现
- ajax实现下拉框与表格中的单选按钮联动,数据从数据库中查出
- 实现jsp页面二级下拉框联动,实时读取数据库数据
- ASP.NET MVC + Jquery 实现Ajax下拉框数据三级联动
- 省市区三级联动下拉选框---具体功能实现
- Extjs4 combobox静态本地数据实现省市联动
- 由ajax,js,xml,php实现的三级联动省市县下拉功能
- 几种方法实现ajax请求内容时使用浏览器后退和前进功能
- history pushState 实现浏览器前进与后退
- JS实现浏览器部分自带的前进后退及刷新等功能
- Ajax实现无刷新三联动下拉框例子
- 在一个jsp页面实现二级下拉框联动,实时读取数据库数据(用javascript实现)
- ASP.NET MVC + Jquery 实现Ajax下拉框数据三级联动