0

フォーム内に複数のフィールドセットがあり、個々の入力/選択要素と、保存時に要素を処理する次の JS/jQuery があります。

var form = {};

$('fieldset').each(function() {
  var fieldsetId = this.id; var fieldset = {};
  $('#'+fieldsetId+' input:checkbox, #'+fieldsetId+' input:radio').each(function() {
    name = $(this).attr('name');
    fieldset[name] = $(this).val();
  });

  $('#'+fieldsetId+' select').each(function() {
    ...
  }

  form[fieldsetId] = fieldset;
});

データを読み込んでいます。問題は、複数のフィールドセットにあります。連続する各フィールドセットは、最後のものを上書きし、以前のすべての入力値も使用しています。

現在、返される処理済みデータは次のようになります。

first-fieldset (object)
  key:2
  textbox:"value"
  select:"value"
second-fieldset (object)
  key:2
  textbox:"value"
  select:"value"

あるべき場所:

first-fieldset (object)
  key:1
  textbox:"value"
second-fieldset (object)
  key:2
  select:"value"

フィールドセット要素が選択されている方法に非常に強い疑いがありますが、私が試したすべての結果が同じ形式であるか、まったくデータがありません。

4

1 に答える 1

2

http://jsfiddle.net/gaby/jdR3V/1/で正常に動作するようです

ただしvar fieldset = {};、呼び出しの外に置くと、説明したように失敗します.each()


また、読みやすさとパフォーマンスを改善することもできます
(直接アクセス可能な for プロパティを使用せず$()、要素を使用して jquery オブジェクトへの参照をキャッシュし、fieldsetそれを使用して複数の動的セレクターの代わりに入力要素を検索することにより) 。

var form = {};
$('fieldset').each(function() {
  var self = $(this),
      fieldset = {};

  self.find('input:checkbox, input:radio').each(function() {
    fieldset[this.name] = this.value;
  });

  self.find('select').each(function() {
    ...
  }

  form[this.id] = fieldset;
});
于 2013-07-02T22:37:33.867 に答える