我有一个 div,其中包含可变数量的输入(文本、隐藏)和下拉列表(每个都可能有一个 ID、一个名称和/或一个或多个类。
此 div 会不时重新加载,并且可能会添加一些新输入或删除旧输入。
我要做的是在每次重新加载之前保持输入或选择的值,而不将当前值传递给服务器。
除了选择字段之外,这里的代码几乎可以满足我的需要 - 没有获取它们的值;一旦这工作,我可以序列化该数组并将其存储在某处,然后解码,迭代并将值写回。
function getAllValues() {
var inputValues = [];
$jq('#slip input').each(function() {
var type = $jq(this).attr("type");
if ((type == "checkbox" || type == "radio") && $jq(this).is(":checked")) {
inputValues.push([ getIdentifier($jq(this)), $jq(this).val()]);
}
else if (type != "button" || type != "submit") {
inputValues.push([ getIdentifier($jq(this)), $jq(this).val()]);
}
})
$jq('#slip select').each(function() {
var type = $jq(this).attr("type");
if (type != "button" || type != "submit") {
inputValues.push([ getIdentifier($jq(this)), $jq(this).val()]); // problem!
}
})
return inputValues;
}
是否会感谢任何输入或对此类问题的更优雅的解决方案?
后来编辑:本杰明很友好地发布了一个指向 jquery serialize() 的链接,它很好地解决了这个问题。如果其他人需要一些代码来恢复保存的值:
function restoreSlipValues(){
var tickets_data = decodeURIComponent($jq("#temporary-values").val()).split("&");
console.log(tickets_data);//.split("&");
$jq(tickets_data).each(function(){
if (this.split("=")[0] !="authenticity_token" && this.split("=")[0].indexOf("_win") < 0 && this.split("=")[0].indexOf("winning") < 0) {
$jq("form#ticks input[name=\"" + this.split("=")[0] + "\"]").val(this.split("=")[1]);
$jq("form#ticks select[name=\"" + this.split("=")[0] + "\"]").val(this.split("=")[1]);
}
});
}