2010-07-12 54 views
1

我已經在dojo中用幾個輸入字段創建了一個對話框。根據一些標準,我想動態地將數據發佈到該對話框內的目標網址(相當於表單上的操作屬性)。然而,我看不出設置對話框的動作,甚至無法手動提交。手動提交Dojo對話框

這是一個最基本的版本對話框:

<div id="my_dialog" dojoType="dojo.dijit.Dialog" style="display:none;" title="My Dialog"> 
<input type="text" dojoType="dijit.form.TextBox" id="input_1" name="input_1" value="info" /> 
<button type="submit" dojoType="dijit.form.Button">Submit</button> 
</div> 

回答

3

我想通了,會分享我學到的東西。

如果你把一個形式的對話框內,您可以訪問它,就像任何其他道場形式。但是你必須確保對話框還不是另一種形式。這是我的問題,當對話框移動到body標籤的末尾時,它導致內部形式消失。

<div id="my_dialog" dojoType="dojo.dijit.Dialog" style="display:none;" title="My Dialog"> 
<form id="my_form" dojotType="dijit.form.Form" method="post" action="/path/"> 
<input type="text" dojoType="dijit.form.TextBox" id="input_1" name="input_1" value="info" /> 
<button type="submit" dojoType="dijit.form.Button" onclick="return someFunction();">Submit</button> 
</form> 
</div> 

使用上面的結構,你有幾個選項來獲得表單的值:從對話框,還是從形式。這意味着dijit.byId(「my_dialog」)。attr(「value」)與dijit.byId(「my_form」)。attr(「value」)相同。這就是最初使我困惑的原因,並使我對話本身可以作爲一種形式。

處理或在提交之前驗證表單中加入onclick =「返回someFunction();」,並確保該函數返回true,只有當形式應提交。

一個額外的缺陷是在對話框中的所有輸入被移動到DOM的末尾。因此,如果您沒有對話框中的表單,並且您希望對話框中的這些輸入用父表單提交,則不會發生。在這種情況下,我在父窗體中創建隱藏字段,然後在提交之前手動將對話框輸入值複製到它們中。

0

dijit.Dialog不必手動提交自己的能力。它只是一個容器,你應該自己管理它的內容。

如果您要提交的對話,只是附加一些事件提交按鈕,使用XHR來提交數據。提交完成後,請自行關閉對話框。

+0

感謝您的回覆!我也查看了xhr手動提交表單數據,但是我需要發佈沒有ajax的數據,因爲發佈的數據確定了用戶最終會在哪裏結束。這可以通過xhr回調來完成,但在這種情況下,執行普通帖子是有意義的。 – 2010-07-14 15:19:51