2012-03-24 12 views
4

何かを書くことができます。何かが既にjQueryに組み込まれているかどうかを尋ねています。jQueryの逆関数がシリアル化されていますか?

+1

があって、それはあなたが言われていない問題の文脈に依存かもしれません米国。あなたは何をしようとしているのですか? – Bojangles

+0

多分これは助けます:http://stackoverflow.com/questions/901115/get-query-values-in-javascript – stewe

+0

おかげさまで私はちょうど怠け者になろうとしていました..私はちょっと便利な機能を作っていると理解していません逆の歓声を提供:) – garyM

答えて

1

いいえありません。

変更するDOM要素をどのように知っていますか?異なった形などで同じ名前の同じ要素が存在する可能性があります。

たぶんparseJSONがお手伝いします:

jQuery.parseJSON(JSON)を返します。オブジェクト
説明:整形JSON文字列を受け取り、その結果、JavaScriptのオブジェクトを返します。

+0

ありがとう... jQuery.serializeは、name属性を使用して要素と値をシリアライズします。これは、URIのエンコーディングとパッキングのほかにあります。プロセスはかなり簡単に逆転します。私はjavascriptの広告jQueryを初めて使っています。私は弾を噛んでjsonに移動しなければならないだろう – garyM

+3

_ "いいえ、できない"と確信しているかもしれない。特定のフォームで(提案された) 'deserialize()'メソッドを呼び出すだけで、値はそのフォームに戻ります。同じ名前を持つ複数の要素がある場合、これらは直列化されたバージョンの複製から順番に設定する必要があります( '.serialize()'の逆の動作)。私はこのような関数を複数のプロジェクト(jQueryではなく)でうまく使用しましたが、セレクタが正しいことをプログラマが判断するのは... – nnnnnn

+0

@nnnnnn。あなたが正しいです、それは安全でないバージョンかもしれません。しかし、jQuery(私が知っている限り)は安全でない機能はゼロです。彼が好きなら、彼は最初のものを書くことができます... – gdoron

13

短い答え:、これを行うには何かbuilt into jQueryはありません。

$.fn.deserialize = function (serializedString) 
{ 
    var $form = $(this); 
    $form[0].reset(); // (A) optional 
    serializedString = serializedString.replace(/\+/g, '%20'); // (B) 
    var formFieldArray = serializedString.split("&"); 

    // Loop over all name-value pairs 
    $.each(formFieldArray, function(i, pair){ 
     var nameValue = pair.split("="); 
     var name = decodeURIComponent(nameValue[0]); // (C) 
     var value = decodeURIComponent(nameValue[1]); 
     // Find one or more fields 
     var $field = $form.find('[name=' + name + ']'); 

     // Checkboxes and Radio types need to be handled differently 
     if ($field[0].type == "radio" || $field[0].type == "checkbox") 
     { 
      var $fieldWithValue = $field.filter('[value="' + value + '"]'); 
      var isFound = ($fieldWithValue.length > 0); 
      // Special case if the value is not defined; value will be "on" 
      if (!isFound && value == "on") { 
       $field.first().prop("checked", true); 
      } else { 
       $fieldWithValue.prop("checked", isFound); 
      } 
     } else { // input, textarea 
      $field.val(value); 
     } 
    }); 
    return this; 
} 

(A):わからないここになぜ...

しかしはあなたがシリアル化された文字列を取得するために.serialize()を使用している場合は、トリックを行う必要がありますjQueryのプラグインですリセットの先頭にあるはオプションです。あなたは、最初のフィールドの値をリセットすること、またはこのような何か使用して明らかにそれらをしたいことがあります。https://stackoverflow.com/a/6786237/1766230

(B)私たちは+を交換する必要がある理由についてhttps://stackoverflow.com/a/24417399/1766230を参照してくださいします。

(C)decodeURIComponentについては、Mozilla Developer Javascript Referenceを参照してください。使用例をボーリング

:;:

jQuery plugin to serialize a form and also restore/populate the form?注意あなたは便利なこれらのソリューションのいくつかを見つけることがあります.serializeArray()したり、データをシリアル化するためにいくつかの他の方法を使用している場合は、上記動作しません)

var $form = $('form.myFormClass'); 
var s = $form.serialize(); 
$form.deserialize(s); 

は、ここでは、値、クリア、リセット、および「デシリアライズ」の設定で遊んでみましょうjsfiddleです:http://jsfiddle.net/luken/4VVs3/

+0

偉大なフィドル/それを作るために時間をかけていただきありがとうございます。 – Tom

関連する問題