1

我有一个 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]);
        }

    });
}
4

1 回答 1

0

表单有一个.serialize方法。在您的情况下,这可能是最容易存储在 localStorage 中的。

.serialize()方法以标准 URL 编码表示法创建文本字符串。它对表示一组表单元素的 jQuery 对象进行操作。表单元素可以有多种类型。

(很高兴它有帮助)

于 2013-03-18T09:25:25.940 回答