1

可変数の入力 (テキスト、非表示) とドロップダウン (それぞれに ID、名前、および/または 1 つ以上のクラスがある場合があります) を含む div があります。

この 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;
}

そのような問題に対する入力またはおそらくより洗練された解決策をいただければ幸いです。

後で編集: Benjamin は、問題を非常にうまく解決した 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 に答える