1

JS を介して動的に生成された入力値があり、フォームを送信すると、値を何らかの方法でグループ化したいと考えていますが、それを行う方法がわかりません。それらをグループ化する必要があるのは、データを取得するときにループが簡単になるためです。

次の HTML を検討してください。

<div class="column one">
     <div class="module">
         <input type="hidden" name="module1[order][]" value="1" />
         <input type="hidden" name="module1[column][]" value="1" />
     </div>

     <div class="module">
         <input type="hidden" name="module5[order][]" value="2" />
         <input type="hidden" name="module5[column][]" value="1" />
     </div>
</div>

<div class="column two">
     <div class="module">
         <input type="hidden" name="module2[order][]" value="1" />
         <input type="hidden" name="module2[column][]" value="2" />
     </div>

     <div class="module">
         <input type="hidden" name="module1[order][]" value="2" />
         <input type="hidden" name="module1[column][]" value="2" />
     </div>
</div>

したがって、HTML から、各モジュール タイプが列に属し、各列が異なるタイプの複数のモジュールを持つことができることがわかります。モジュールには 2 つの入力値があり、それぞれが DOM 内の列と位置に対応するデータを保持しています。

したがって、これが現在送信されると、配列はすべての列をグループ化し、すべての注文値をグループ化します。これにより、フォームを再度表示するときにデータを取得することが非常に難しくなります。

モジュール内の値ではなく、モジュールごとに入力値をグループ化しようとしています。

これを読むと混乱する可能性があることはわかっているので、さらに説明する必要がある場合はお知らせください。

ありがとう!

4

1 に答える 1

0

DOM 要素の実際の順序を変更すると、送信される順序も変更されます。jQuery がこの順序を変更すると、次のような要素になります。

div class="column one">
     <div class="module">
         <input type="hidden" name="modules[3][type]" value="1" />
         <input type="hidden" name="modules[3][content]" value="fasdf" />
     </div>

     <div class="module">
         <input type="hidden" name="modules[1][type]" value="2" />
         <input type="hidden" name="modules[1][content]" value="image" />

     </div>
</div>

<div class="column two">
     <div class="module">
         <input type="hidden" name="modules[2][type]" value="1" />
         <input type="hidden" name="modules[2][content]" value="heading" />
     </div>

     <div class="module">
         <input type="hidden" name="modules[0][type]" value="2" />
         <input type="hidden" name="modules[0][content]" value="what ever" />
     </div>
</div>

問題は、PHP が配列をソートするためにインデックスを取得することですが、これは問題なく正常です。結果は次のようになります。

array(4) {
   [3]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(5) "fasdf" }
   [2]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(7) "heading" }
   [1]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(5) "image" }
   [0]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(9) "what ever" }
}

これを修正するには 2 つの方法があります。1 つは、ドラッグ機能に小さなコードを追加すること (可能であれば)、またはフォーム (jQuery) を送信する前に次のようなことを行うことです。

function check() {
   alert("he");
   $i = 0;
   $(".module").each(function(){
      $(this).find("input[name*='type']").attr("name", "modules["+$i+"][type]"); //*= means like
      $(this).find("input[name*='content']").attr("name", "modules["+$i+"][content]");
      $i++;
   });
   return true;
}

これにより、フォームを送信する前にインデックスが変更されます。これを取得する方法:

array(4) {
   [0]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(5) "fasdf" }
   [1]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(5) "image" }
   [2]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(7) "heading" }
   [3]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(9) "what ever" }
}

これはあなたが扱うことができるデータ構造ですか?

于 2013-05-13T17:42:35.810 に答える