提交页面,中途选择选项时跳转了页面,返回提交页面时刷新了,以前的数据消失,解决方法:利用session存储数据,返回时再取出回显
思路:一、点击跳转时利用session把数据存起来
二、跳转页面再存session回提交页(可以略过,我的是因为新页面需要传数据回来,才在新页面也存了一个session)
三、返回页面,sessionStorage.getItem(key)获取之前存储的数据再放回页面中
实现:
一、点击跳转时利用session把数据存起来
1.先保存需要存储的数据
var model = {};//var一个空对象,里面用来存所有数据
model.Pics = []//对象里的数组
2.存值
我的是在跳转的方法里获取值,跳转时存session
$(".xzzc_select").click(function () {
window.location.href = "/FeedBack/ChoosePosition";
//session
model.ComplainLables = $('.ts-item-w').children(".active").text()//获取的所需的数据
model.CommentType = $('#commentType').children(".active").attr('value')
//存值,session只能存字符串,需要转换
sessionStorage.setItem("key", JSON.stringify(model))
})
二、跳转页面再存跳转页面的session回提交页
这是跳转的页面
function sureFunc() {
//获取选中的
var orgId = $("input:radio:checked").attr("orgId");
//存session 需要返回给提交页面的数据
sessionStorage.setItem("orgId", orgId);
window.history.go(-1);
}
三、返回页面,获取存储的数据再放回页面中
跳转回来之后,在提交的页面
param和model需要注意,param是传给后台的值,model是存储的值。
$(function () {
//获取选项页面穿过来的session
var cpId = sessionStorage.getItem("orgId");
if (cpId) { param.MPlatId = cpId }//param.MPlatId是需要传给后台的
//获取之前存的session,存的时候转换过,现在用JSON.parse()方法转换回来,否则打印就时[object object]
var subModel = JSON.parse(sessionStorage.getItem("key"));
if (subModel) {//如果有值
console.log(subModel);
//这里重新绑定选中的数据到界面,
//如果model.ComplainLable有值,就放回
if (subModel.ComplainLables) { $('.xzzc_select .val').text(subModel.ComplainLables)}
//
//图片放回例子
if (subModel.Pics) {
//param是提交所需要的数据,重新回来之后为空了,重新赋值给param
param.Pics = subModel.Pics
for (var a = 0; a < subModel.Pics.length; a++) {
var Nhtml = "";
Nhtml += '<span class="fileBox pull-left" name="fileBox" style="margin-right:10px;">';
//这里给x删除,另外添加了一个自定义属性url,和上传的图片的url一样,为了删除时同时删除model.Pics里面的
Nhtml += '<img class="filedel" οnclick="fileRemove(this)" src="/images/img_closed2_nor.png" url="' + subModel.Pics[a] + '">';
Nhtml += '<img src="' + subModel.Pics[a] + '" class="fileimg" />';
Nhtml += '</span>';
$(".dimg-wrap").prepend(Nhtml);
}
}
}
图片删除功能:因为是上传成功一张,就push一张进param.Pics,如果删除不仅要从页面删除图片,也要从param.Pics的数组里删除,有点麻烦
- 注意 我的model.Pics,直接是param.Pics=model.Pics这样赋值的
//小x删除的点击事件
function fileRemove(obj) {
var url = $(obj).attr("url");//获取点击删除的url属性值
var deleteIndex = getDeleteIndex(url);//传参调用方法,返回所要删除的下标
debugger;
if (deleteIndex > -1) {
//这是为什么删的是param里面的值,因为存图片的时候 model的值我是直接param.Pics=model.Pics的
//删了param.Pics里面的值,model.Pics也会被删,结果一样的
param.Pics.splice(deleteIndex, 1)//删除
}
$(obj).parents("span.fileBox[name=fileBox]").remove();//从页面删除图片
}
function getDeleteIndex(url) {
var index = -1;
param.Pics.forEach(function (v, cindex) {
//v是图片url,cindex是下标
//如果点击删除的url和param.Pics里某个图片的url一样
if (v == url) {
index = cindex;
}
});
return index;//返回下标
}
大概就是这样。有点乱
可以先写不需要跳转刷新的情况下数据提交,提交成功后 再来写跳转刷新后重新获取值的提交
提交传数据给后台 param和model之间:
param的有些值是在别的方法里赋值的,刷新之后,这个值就没有了,提交的这个值就是underfind,
那就可以var subModel = JSON.parse(sessionStorage.getItem("key"));
if (subModel){ param.Pics = subModel.Pics }
在有session的情况下,把session存的值给param.