代码:
var PageState = {
MakeParams: function (valueState) {
var params ={};
var controlState={};
//获取控件中的值
var inputs = document.getElementsByClassName("controlKeep").getElementsByTagName("input");
var selects = document.getElementsByClassName("controlKeep").getElementsByTagName("select");
//制作json字符串
for (var i = 0; i < inputs.length; i++) {
if ($("#" + inputs[i].id).attr("type") == "text" || $("#" + inputs[i].id).attr("type") == "hidden") {
controlState[inputs[i].id]=$("#" + inputs[i].id).val()
}
else if ($("#" + inputs[i].id).prop("type") == "checkbox") {
if ($("#" + inputs[i].id).prop("checked") == true) {
param += "\"" + inputs[i].id + "\"" + ":" + "\"" + 1 + "\",";
controlState[inputs[i].id]=1;
}
else { controlState[inputs[i].id]=-1; }
}
}
for (var j = 0; j < selects.length; j++) {
controlState[selects[j].id]=selects[j].value;
}
params.controlState=controlState;
params={
"valueState":valueState
}
//返回json
return JSON.stringify(params) ;
},
DecrizeParams: function (strJson) {
var params =JSON.parse(strJson);
for (var key in params.controlState) {
var value=params[key]
var obj = document.getElementById(key);
//input类型值填充
if (obj.nodeName.toLowerCase() == "input") {
if (type = "text" || type == "hidden") {
$("#" + key).val(value);
}
if (type == "checkbox") {
if (value > 0) //正数代表选择
{ $("#" + key).prop("checked", true); }
else
{ $("#" + key).prop("checked", false); }
}
}
//select类型值填充
if (obj.nodeName.toLowerCase() == "select") {
var selectObj = document.getElementById(key);
for (i = 0; i < selectObj.options.length; i++) {
var curOptObj = selectObj.options[i];
var value = curOptObj.value;
if (value == value) {
curOptObj.selected = true;
}
}
}
}
return params.valueState
}
};
发送
var parames= GoAndBackUrl.MakeParams({a:12,b:123});
解析
var obj=backMsg.DecrizeParams();
这里是后台写入隐藏字段,页面load的时候获取字段解析,填充。
这段代码只是div中的input和select两种控件,使用controlKeep标记,则可以搜集到controlstate这种,也可能存在js变量,可以组合成参数传入。
读取的时候拿到数据调用DecrizeParams,返回的js变量的结合。