Hello dearest community。
我在过去两天遇到麻烦,我无法解决。 问题是我以这种方式定义了Dojo表单:
<div id="reportBulananDialog" jsId="reportBulananDialog" dojoType="dijit.Dialog" title="Laporan Bulanan" draggable="true">
<div dojoType="dijit.form.Form" id="reportBulananForm" jsId="reportBulananForm" action="action/display_reportBulanan.php" method="post">
...
以这种方式定义的script.js
文件中的连接调用:
dojo.connect(mnuLaporanBulanan, "onClick", null, function(e) {
dijit.byId("reportBulananDialog").show();
});
dojo.connect(reportBulananForm, "onSubmit", null, doReportBulananForm);
dojo.connect(reportBulananCancel, "onClick", null, function(e) {
reportBulananDialog.hide();
});
您可以看到我将onSubmit事件连接到以这种方式定义的函数doReportBulananForm
:
function doReportBulananForm()
{
alert('test1');
dojo.xhrPost({
form: this.domNode,
handleAs: "json",
load: function(data) {
alert("after call: " + data);
if(data.success) {
reportBulananDialog.hide();
okDialog.set("title","Menampilkan report");
okDialogMsg.innerHTML = "Report";
okDialog.show();
}
else {
okDialog.set("title","Error creating group");
okDialogMsg.innerHTML = data.error;
okDialog.show();
}
},
error: function(error) {
okDialog.set("title","Error creating group");
okDialogMsg.innerHTML = error;
okDialog.show();
alert("error " + data);
}
});
alert('test2');
}
问题是,应用程序总是将应用程序流重定向到文件action/display_reportBulanan.php
,而不是处理其json输出..
这非常令人困惑,我做错了什么?
谢谢, EKO
答案 0 :(得分:2)
我认为您必须阻止默认表单提交。 在onSubmit处理程序中,请改为:
function doReportBulananForm(evt)
{
evt.preventDefault();
alert('test1');
// The rest of your code goes here
}
您还可以在connect:
中为函数调用添加一个事件参数dojo.connect(reportBulananForm, "onSubmit", null, doReportBulananForm(evt));
有关详情,请参阅此页:http://dojotoolkit.org/reference-guide/quickstart/events.html
答案 1 :(得分:2)
您需要停用默认表单提交。您可以在false
函数中返回doReportBulananForm
或使用以下代码:
function doReportBulananForm(e) {
dojo.stopEvent(e);
}
有关更多详细信息,请参阅dojo的测试用例。见http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_Form_onsubmit.html