2009-12-23 79 views
5

我想通過jQuery模態對話框做一些數據輸入。我希望能夠使用類似下面的內容收集我的數據以供發佈。jQuery對話框張貼表單域

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

然而,這沒有結果。如果我只引用包含的表單而不是myDialog,那麼我會獲取除對話框中的所有字段外的所有字段。

收集AJAX提交對話框中表單域的最佳方法是什麼?

回答

6

發生這種情況的原因是dialog實際上是刪除您的元素並將其添加到文檔主體中的根級別。這樣做是爲了讓對話腳本可以對其定位充滿信心(確保沒有包含正在對話的數據,例如在相對定位的元素中)。這意味着您的字段實際上是不再包含您的表單中的

您仍然可以通過ID訪問各個領域得到他們的價值觀(或類似的東西),但如果你想使用一個方便serialize功能,你將需要有內對話形式

+0

但如果你使用asp.net masterpages,很難把另一種形式的內頁。你只能在一個aspx頁面上有一個窗體:( – NickG 2014-05-07 12:26:27

2

我剛剛遇到完全相同的問題,因爲我的對話框中有太多字段單獨引用它們,我所做的是將對話框封裝到臨時窗體中,將其序列化並將結果追加到我的原始表格的序列化數據:

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

對話框中的表單元素從窗體中移除並移動到主體的結尾。你需要這樣的東西。

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

有沒有辦法讓這個模式對話框工作? – NickG 2014-05-07 12:25:35

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

這就像魅力