简体   繁体   English

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

[英]using jQueryUI sortable list with forms

I'm using jQueryUI to create a sortable list, and the UI part works great in that I can sort the items as desired on the web page. 我正在使用jQueryUI创建一个可排序的列表,而UI部分的工作非常好,因为我可以根据需要在网页上对项目进行排序。 I can't figure out, though, how the order of the sorted list is included in the POST. 但是,我无法弄清楚如何将排序列表的顺序包含在POST中。 I'm a total noob with javascript so please forgive me if this is really simple. 我是javascript的总菜鸟所以如果这很简单,请原谅我。

Here are the relevant portions of my html: 以下是我的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>

How can the order of Jamie, Joanie, Morley, Frank, and Larry be encoded in the POST? Jamie,Joanie,Morley,Frank和Larry的命令如何在POST中编码?

You can use the method .serialize on your sortable object : http://docs.jquery.com/UI/Sortable#method-serialize 您可以在可排序对象上使用方法.serializehttp.serialize

$( "#sortable" ).sortable('serialize') will give you an ajax submittable array of items. $( "#sortable" ).sortable('serialize')将为您提供ajax可提交的项目数组。 Just assign it to an input box if you are not using ajax. 如果您不使用ajax,只需将其分配给输入框即可。 Or simply pass it into your data array if using ajax 或者,如果使用ajax,只需将其传递到数据数组中

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

As the jquery docs note, for this to work your elements need to have ids in the form of set_number (eg rank_1, rank_2). 正如jquery文档所指出的那样,为了实现这一点,你的元素需要以set_number的形式出现id(例如rank_1,rank_2)。 So I've modified your HTML 所以我修改了你的HTML

Just remove the return false in the form and the serialized value will be set to the input box on form submission 只需删除表单中的return false ,序列化值将设置为表单提交的输入框

Another option is to just have a hidden input form field with the ID value for the item as the value and the same name. 另一种选择是只有一个隐藏的输入表单字段,其中项目的ID值为值和相同的名称。 Then submit the form after sorting stops. 然后在排序停止后提交表单。 The values will all be available in the posted data in the order they were after the sort. 这些值将按照排序后的顺序在发布的数据中提供。

I do something like this: 我做这样的事情:

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

And the form looks like this: 表单看起来像这样:

<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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM