2010-07-12 45 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