本文共 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); } } |
正常使用没有问题,但是当用户跳转到其它页面再回退时选中丢失。关于回退普及下面几个关键的知识点:
知道了以上几点后,首先,为什么城市列表会丢失,因为它是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,如需转载请自行联系原作者