手动提交Dojo对话框

时间:2010-07-12 21:34:05

标签: dojo dialog

我在dojo中创建了一个带有几个输入字段的对话框。根据一些标准,我想动态地将数据发布到该对话框中的目标URL(相当于表单上的action属性)。但我认为无法设置对话框的操作,甚至无法手动提交对象。

以下是对话框的简单版本:

<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>

2 个答案:

答案 0 :(得分:3)

我想出来并将分享我学到的东西。

如果您在对话框中放置一个表单,则可以像访问任何其他Dojo表单一样访问它。但是你必须确保对话框不是另一种形式。这是我的问题,当对话框移动到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 =“return someFunction();”,并确保只有在提交表单时该函数才返回true。

另一个缺陷是对话框中的所有输入都被移动到dom的末尾。因此,如果您在对话框中没有表单,并且您希望对话框中的这些输入与父表单一起提交,那么这种情况就不会发生。在这种情况下,我在父表单中创建隐藏字段,然后在提交之前手动将对话框输入值复制到其中。

答案 1 :(得分:0)

dijit.Dialog无法手动提交。它只是一个容器,您应该自己管理其中的内容。

如果要提交对话框,只需将一些事件附加到提交按钮,然后使用XHR提交数据。提交完成后,请自行关闭对话框。