Подтвердить что ты не робот

Используя отсортированный список jQueryUI с формами

Я использую jQueryUI для создания сортируемого списка, а часть пользовательского интерфейса отлично работает, поскольку я могу сортировать элементы по желанию на веб-странице. Однако я не могу понять, как порядок отсортированного списка включен в POST. Я полный noob с javascript, поэтому, пожалуйста, простите меня, если это действительно просто.

Вот соответствующие части моего html:

<script type="text/javascript">
  google.load("jquery", "1");
  google.load("jqueryui", "1");
  function OnLoad(){
    $( "#sortable" ).sortable({ axis: "y", containment: "#ballot", scroll: false });
    $( "#sortable" ).disableSelection();
  }
  google.setOnLoadCallback(OnLoad);
</script>

[...]

<form method="POST" action="/vote">
<input type="hidden" name="key" value="{{ election.key }}">
<input type="hidden" name="uuid" value="{{ uuid }}">
<div id="ballot" class="center">
<ol id="sortable" class="rankings">
  <li class="ranking">Jamie</li>
  <li class="ranking">Joanie</li>
  <li class="ranking">Morley</li>
  <li class="ranking">Frank</li>
  <li class="ranking">Larry</li>
</ol>
</div>
</form>

Как может порядок Jamie, Joanie, Morley, Frank и Larry быть закодирован в POST?

4b9b3361

Ответ 1

Вы можете использовать метод .serialize для вашего сортируемого объекта: http://docs.jquery.com/UI/Sortable#method-serialize

$( "#sortable" ).sortable('serialize') предоставит вам массив элементов, подлежащий аяксу. Просто назначьте его в поле ввода, если вы не используете ajax. Или просто передайте его в свой массив данных, если используете ajax

ИЗМЕНИТЬ Пример здесь: http://jsfiddle.net/jomanlk/KeAer/2/

Как отмечают jquery docs, для этого для работы ваши элементы должны иметь идентификаторы в форме set_number (например, rank_1, rank_2). Поэтому я изменил ваш HTML

Просто удалите return false в форме, и сериализованное значение будет установлено в поле ввода при отправке формы

Ответ 2

Другой вариант состоит в том, чтобы просто иметь поле скрытой формы ввода с идентификационным значением для элемента в качестве значения и того же имени. Затем отправьте форму после сортировки. Все значения будут доступны в опубликованных данных в том порядке, в котором они были после сортировки.

Я делаю что-то вроде этого:

$(".sortable").each(function () {
    $(this).sortable({
        update: function (event, ui) {
            $(this).closest("form").trigger("onsubmit");
        }
    });
});

И форма выглядит так:

<form ...>
<ul class="sortable">

        <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Some info here<input id="id_name" name="id_name" type="hidden" value="1" /></li>

        <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Some more info<input id="id_name" name="id_name" type="hidden" value="2" /></li>

</ul>
</form>