我知道之前已经提出这个问题,但这些答案都不适用于我的情况。
我正在使用jQuery UI的可排序小部件。 Sortable有一个“更新”选项 - 无论放在哪里,都会在排序停止后执行。我现在通过ajax提交表单:
$("#sortable tbody.content").sortable({
update: function() {
submitForm();
}
});
function submitForm() {
$.ajax({
url: 'script.php',
type: 'post',
data: $('#my-form').serialize(),
success: function(output) {
alert(output);
},
error: function() {
alert('an error occured');
}
});
}
现在问题在于,表单由输入隐藏字段组成,这些字段位于要排序的表行中。 JQuery UI的可排序小部件从dom中删除tr并动态添加它。
如果我在进行任何排序之前运行submitForm()函数,那么所有隐藏的表单字段都可以正常发布。但是当我使用sortable移动一个表行时,根据firebug,该行中的隐藏字段仍然存在,但是动态放置,因此当表单被子接收时,不会发布一个隐藏字段。移动另一个表行,并且不发布该隐藏字段。等等...
问题出在这里:
data: $('#my-form').serialize()
如果动态生成#my-form,如何使用它。
不,我做不到:
$('#my-form').live('submit', function() {
$.ajax({
url: 'script.php',
type: 'post',
data: $('#my-form').serialize(),
success: function(output) {
alert(output);
},
error: function() {
alert('an error occured');
}
});
});
因为就像我提到的那样,它需要在一个函数内部执行,所以我可以在sortable的update选项中调用它。