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 中你可以看到每个模块类型都属于一个列,并且每个列可以有多个不同类型的模块。并且在模块中有两个输入值,每个输入值都保存与 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" }
}

有两种方法可以解决此问题。一种是在拖动功能中添加一些代码(如果可能的话),或者在发送表单(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 回答