我在我的网站上创建了一个拖放列表,它的拖放方面似乎正在运行。每个列表元素的内部都是一个“隐藏”表单字段,其中包含与每个列表元素相关的数据。
现在,如果我根本不拖动列表并提交表单,则所有内容都按预期提交。但是,如果我将一个元素拖到另一个元素上,我拖动的元素(或者其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);
});
});
编辑:
注意到这是表单中创建/修改的所有项目的问题。我如何正确提交表格?
答案 0 :(得分:2)
提交时,在<form>
标记内,应该序列化并提交每个隐藏元素。为此,我认为当您拖动元素时,它超出了<form>
标记,因此未提交
添加:您无需创建隐藏元素来存储<li>
元素的值。你应该遵循这种方法:
<li>
元素的数据在这种情况下,代码的第(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工作也很好。