2

この問題があります。FormのすべてのフィールドをJsonにシリアル化するためにserializearray()jqueryを使用します。入力にname属性を入れれば問題なく動作しますが、ID属性だけを入れたい場合は動作しません。

名前による優れた関数[名前は似ています:'#myformnameid']:

function formToJson(nameForm)
{
 var jsonForm={};
 var queryFrom = $(nameForm).serializeArray();

 for (i in queryFrom) {
   jsonForm[queryFrom[i].name] = queryFrom[i].value;
  }
 return jsonForm;
}

attrでIDソリューションを試しました。

function formToJson(nameForm)
{
 var jsonForm={};
 var queryFrom = $(nameForm).serializeArray();

 for (i in queryFrom) {
   jsonForm[queryFrom[i].attr("id")] = queryFrom[i].value;
  }
 return jsonForm;
}

何か案が?

4

2 に答える 2

4

入力オブジェクトの形式をserializeArray取り、それらをjavascriptオブジェクトの配列に変換します。ドキュメントから、フォームは次のようになります

[
  {
    name: "a",
    value: "1"
  },
  {
    name: "b",
    value: "2"
  },
  {
    name: "c",
    value: "3"
  }    
]

この配列を名前または値で繰り返すことができます。そうすると、適切なデータが返されます。

あなたが抱えている問題は、実際の要素を反復処理しておらず、それらの要素からのデータだけを反復処理していることです。要素を反復処理する場合は、次のような操作を行う必要があります。

function formToJson(nameForm)
{
 var jsonForm={};
 $("input", $(nameForm)).each(function(index){
   jsonForm[$(this).attr("id")] = this.value;
 })
 return jsonForm;
}
于 2012-08-28T14:34:21.817 に答える
-1

これは古い投稿ですが、私は自分の考えを追加したいと思いました。以下のリンクからソースコードをコピーすると、返された配列に任意の要素属性を追加できます。このように、実装はまさにjQueryの実装です。はい、jQueryソースが更新された場合は手動でコードを更新する必要がありますが、それは他の解決策と同じです。

https://searchcode.com/codesearch/view/25323764/

var
  rbracket = /\[\]$/,
  rCRLF = /\r?\n/g,
  rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
  rsubmittable = /^(?:input|select|textarea|keygen)/i,
  rcheckableType = /^(?:checkbox|radio)$/i;

$.fn.extend({
  customSerializeArray: function() {
    return this.map(function() {

      // Can add propHook for 'elements' to filter or add form elements
      var elements = $.prop(this, 'elements');
      return elements ? $.makeArray(elements) : this;
    })
    .filter(function() {
      var type = this.type;

      // Use .is(':disabled') so that fieldset[disabled] works
      return this.name && !$(this).is(':disabled') &&
        rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
        (this.checked || !rcheckableType.test(type));
    })
    .map(function(i, elem) {
      var val = $(this).val();

      if (val == null) {
        return null;
      }

      if ($.isArray(val)) {
        return $.map(val, function(val) {
          return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
        });
      }

      return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
    }).get();
  }
});
于 2018-04-23T18:48:16.687 に答える