2011-05-26 117 views
0

我在我的网站上创建了拖放列表,并且它的拖放方面似乎正在工作。每个列表元素的内部是一个“隐藏”表单字段,其中包含与每个列表元素一起使用的数据。JQuery拖放列表问题

现在,如果我根本不拖动列表并提交表单,则所有内容都按预期提交。但是,如果我将元素拖到另一个元素上,则我拖动的元素(或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

里面<form>标签提交时,每个隐藏的元素都应该被序列化并提交。对于这一点,我认为当你拖着它超越<form>标签,因此没有提交


添加元素:你不必创建存储<li>元素的值的隐藏元素。您应该按照这种方法:

  1. .data方法来存储数据的任何<li>元素
  2. 分配为形式的自定义事件处理程序。

在这种情况下,代码的点(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 */

+0

原来我搞砸了我的表格标签内的一个表:( – 2011-05-26 20:18:17

2

问题是基于具有表内的形式标签,其包含表单元素。将表格标签移动到表格外,并且元素将正确提交。

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