JQuery拖放列表问题

时间:2011-05-26 18:37:42

标签: jquery html forms submit

我在我的网站上创建了一个拖放列表,它的拖放方面似乎正在运行。每个列表元素的内部都是一个“隐藏”表单字段,其中包含与每个列表元素相关的数据。

现在,如果我根本不拖动列表并提交表单,则所有内容都按预期提交。但是,如果我将一个元素拖到另一个元素上,我拖动的元素(或者其DOM被移动的任何元素)都不会被提交。不确定这里发生了什么。以下是每个可拖动元素的片段:

<ul class="sortable ui-sortable" id="sortable_buildings">
<li class="ui-state-default" id="1" style=""><input type="hidden" name="order[]" value="128"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Carlu</li>

<li class="ui-state-default" id="1"><input type="hidden" name="order[]" value="158"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>CPR Building</li>
</ul>

和JQuery魔术

$(document).ready(function(){
            $("#sortable_buildings").sortable();

            $('#selected_buildings').change(function(){
                $('#sortable_buildings').html('');
                var str = "";
                $("#selected_buildings option:selected").each(function () {
                   str +=  '<li class="ui-state-default" id="1"><input type="hidden" name="order[]" value="' + $(this).attr('value') + '" /><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>' + $(this).text() + '</li>'
                 });
                 $("#sortable_buildings").append(str);
            });
        });

编辑:

注意到这是表单中创建/修改的所有项目的问题。我如何正确提交表格?

2 个答案:

答案 0 :(得分:2)

提交时,在<form>标记内,应该序列化并提交每个隐藏元素。为此,我认为当您拖动元素时,它超出了<form>标记,因此未提交


添加:您无需创建隐藏元素来存储<li>元素的值。你应该遵循这种方法:

  1. .data方法,用于存储任何<li>元素的数据
  2. 为表单分配自定义事件处理程序。
  3. 在这种情况下,代码的第(1)点将是:

    /* store and append <li> tag */

    var tempList=$("<li>other stuff but no hidden field</li>");
    tempList.data("value", $(this).attr("value"); // store 128/158 whatever you want
    $(target).append(tempList);
    
    // bind form submit option
    $(this).parent().bind("submit", function() 
    { 
    // serialize all <li> tag with data :-)
    }
    

    /* retrieve */

答案 1 :(得分:2)

问题是基于表格中包含表单元素的表单标记。将表单标记移到表格之外,元素将正确提交。

P.S。我只是在FF中被这种情况所困扰,即使表格中有表格标签,IE工作也很好。