Создание HTML-форм с массивами - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть форма с такими элементами, как:

<div class="row1">
   <select name="someSelectField" multiple="multiple" class="selectList">
      <option value="1">1</option>          
      <option value="2">2</option>          
   </select>
   <input type="checkbox" name="checkboxField" class="checkboxField" value="1" /> checkbox</td>
</div>
<div class="row2">
   <select name="someSelectField" multiple="multiple" class="selectList">
      <option value="1">1</option>          
      <option value="2">2</option>          
   </select>
   <input type="checkbox" name="checkboxField" class="checkboxField" value="1" /> checkbox</td>
</div>

Это будет продолжаться вниз по странице. С множеством разных строк этих же полей. Не задано ни одной строки, так как для создания новых строк используется JavaScript.

У меня вопрос: каким должно быть значение каждого атрибута имени, чтобы он оставался сгруппированным как массивы и на него можно было ссылаться вместе? Например, если я использую someSelectField [1], когда метод GET, форма отправляет его как someSelectField [1] = 1 & someSelectfield [1] = 2 (если выбраны оба). Я ищу, чтобы это было someSelectField = 1 & someSelectfield = 2 и т. Д.

Любая помощь будет оценена. Благодарю.

1 Ответ

1 голос
/ 21 сентября 2011

Почему бы вам просто не дать элементам управления уникальные имена?Если ваш javascript способен давать индексированные имена классов divs, вы можете просто реструктурировать html следующим образом:

<div class="row1">
   <select name="someSelectField1" multiple="multiple" class="selectList">
      <option value="1">1</option>          
      <option value="2">2</option>          
   </select>
   <input type="checkbox" name="checkboxField1" class="checkboxField" value="1" /> checkbox</td>
</div>
<div class="row2">
   <select name="someSelectField2" multiple="multiple" class="selectList">
      <option value="1">1</option>          
      <option value="2">2</option>          
   </select>
   <input type="checkbox" name="checkboxField2" class="checkboxField" value="1" /> checkbox</td>
</div>

Преимущество этого также в том, что вы также независимы от сервера, поскольку некоторые фреймворки действительно хорошо анализируют массивы html и даютВы правильный массив, а некоторые просто перезаписывают ключи.

Ваш синтаксический анализ может немного запутаться на заднем конце, если вам разрешено удалять элементы из середины, а не только из конца, но это не должно быть слишком плохо.И если это вызывает озабоченность, вы можете написать простой скрипт jQuery, который снова выстроит все ваши имена в строку.Предупреждение, непроверенный код следует:

$("div[class^='row']").each(function(idx, value) {
    var $value = $(value);
    $value.find(".selectList").attr("name", "someSelectField"+(idx+1));
    $value.find(".checkboxField").attr("name", "checkboxField"+(idx+1));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...