使用带有表单的jQueryUI可排序列表

gae*_*fan 15 javascript forms post jquery-ui

我正在使用jQueryUI创建一个可排序的列表,而UI部分的工作非常好,因为我可以根据需要在网页上对项目进行排序.但是,我无法弄清楚如何将排序列表的顺序包含在POST中.我是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>
Run Code Online (Sandbox Code Playgroud)

Jamie,Joanie,Morley,Frank和Larry的命令如何在POST中编码?

Joh*_*hnP 15

您可以.serialize在可排序对象上使用该方法:http://docs.jquery.com/UI/Sortable#method-serialize

$( "#sortable" ).sortable('serialize')会给你一个ajax可提交的项目数组.如果您不使用ajax,只需将其分配给输入框即可.或者,如果使用ajax,只需将其传递到数据数组中

编辑 示例:http://jsfiddle.net/jomanlk/KeAer/2/

正如jquery文档所指出的那样,为了实现这一点,你的元素需要以set_number(例如rank_1,rank_2)的形式存在id .所以我修改了你的HTML

只需删除return false表单中的序列化值,将设置为表单提交的输入框


Dou*_*mpe 6

另一种选择是只有一个隐藏的输入表单字段,其中项目的ID值为值和相同的名称.然后在排序停止后提交表单.这些值将按照排序后的顺序在发布的数据中提供.

我做这样的事情:

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

表单看起来像这样:

<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>
Run Code Online (Sandbox Code Playgroud)