如何在动态生成的表单上使用serialize()?

时间:2011-09-13 02:40:02

标签: javascript jquery ajax jquery-ui

我知道之前已经提出这个问题,但这些答案都不适用于我的情况。

我正在使用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选项中调用它。

0 个答案:

没有答案