jQuery对话框发布表单字段

时间:2009-12-23 23:21:47

标签: jquery-ui jquery

我正在尝试通过jQuery模式对话框进行一些数据输入。我希望使用以下内容来收集我的数据以便发布。

data = $('#myDialog').serialize();

然而,这没有任何结果。如果我仅引用包含的表单而不是myDialog,那么我将获得页面上的所有字段,除了我的对话框中的那些字段。

在AJAX提交的对话框中收集表单字段的最佳方法是什么?

4 个答案:

答案 0 :(得分:6)

发生这种情况的原因是dialog实际上正在删除您的元素并在文档正文的根级别添加它们。这样做是为了使对话脚本可以对其定位充满信心(确保对话框中的数据不包含在相对定位的元素中)。这意味着您的字段实际上不再包含在您的表单中

你仍然可以通过id(或类似的东西)访问各个字段来获取它们的值,但是如果你想使用一个方便的serialize函数,你将需要一个表单 对话框。

答案 1 :(得分:2)

我遇到了完全相同的问题,因为我在对话框中有太多的字段来单独引用它们,我所做的就是将对话框包装成临时表单,序列化它并将结果附加到我的原始表单中执行ajax调用之前的序列化数据:

function getDialogData(dialogId) {
    var tempForm = document.createElement("form");
    tempForm.id = "tempForm";
    tempForm.innerHTML = $(dialogId).html();
    document.appendChild(tempForm);
    var dialogData = $("#tempForm").serialize();
    document.removeChild(tempForm);
    return dialogData;
}

function submitForm() {
    var data = $("#MyForm").serialize();
    var dialogData = getDialogData("#MyDialog");
    data += "&" + dialogData;
    $.ajax({
        url: "MyPage.aspx",
        type: "POST",
        data: data,
        dataType: "html",
        success: function(html) {
            MyCallback(html);
        }
    });
}

答案 2 :(得分:2)

对话框中的表单元素将从表单中删除并移动到正文的末尾。你需要这样的东西。

 $("#dialog_id").dialog().parent().appendTo($("#form_id"));

答案 3 :(得分:0)

jQuery("#test").dialog({
           autoResize:true,
           width:500,
           height:600,
           modal: true,
           bgiframe: true,
           }).parent().appendTo("form");

这就像魅力一样