4

フォームを逆シリアル化するために、単純な各関数を使用してきました。

  data = { key : val, ... };
  form = $('#formId');
  $.each(data, function(val,i) {
    form.find('*[name="' + val + '"]').val(data[val]);
  });

しかし、非標準のフォーム要素(ラジオボタン/チェックボックスなど)では機能しないようです。私は数時間さまざまな例で遊んでいて、それを機能させることができません。誰もがこれに対するエレガントな解決策を知っていますか?

4

2 に答える 2

3

これを試して:

html:

<form id="formId">
    a: <input name="a" /><br />
    b: <input name="b" /><br />
    c: <input type="checkbox" name="c" /><br />
    d: <select name="d"><option value="d1">d1</option><option value="d2">d2</option></select><br />
    e: <input type="radio" value="1" name="e" /><br />
    e: <input type="radio" value="2" name="e" /><br />
    e: <input type="radio" value="3" name="e" /><br />
    f: <input type="checkbox" name="f" /><br />
</form>

js:

var 
    data = { a: "value for a", b: "value for b", c: false, d:"d2", e: "2", f:true },
   form = $('#formId');

   $.each(data, function(i, el) {

      var 
          fel = form.find('*[name="' + i + '"]'),
          type = "", tag = "";

       if (fel.length > 0) {

           tag = fel[0].tagName.toLowerCase();

           if (tag == "select" || tag == "textarea") { //...
              $(fel).val(el);
           }
           else if (tag == "input") {
              type = $(fel[0]).attr("type");
               if (type == "text" || type == "password" || type == "hidden") {
                  fel.val(el);
               } 
               else if (type == "checkbox") {
                  if (el)  
                     fel.attr("checked", "checked"); 
               }
               else if (type == "radio") {
                   fel.filter('[value="'+el+'"]').attr("checked", "checked"); 
               }
           }
       }
   })
于 2011-03-04T19:06:31.613 に答える
1

たぶん、このようなプラグインが役立つでしょう。

$('#form-id').deserialize([{'name':'firstname','value':'John'},{'name':'lastname','value':'Resig'}]);

数年更新されていないようです。

于 2011-03-04T17:31:00.903 に答える