我想使用dijit.form.Form
进行应用程序登录,允许dojo执行表单验证并使用xhrPost提交表单。我相信这可以通过覆盖onSubmit
事件并使用this.validate()
来验证登录表单来轻松完成。
为了成功登录,如何判断onSubmit
事件何时完成,以便我可以安全地从DOM中删除登录表单?
从文档中可以看出dojo(validate?)可能会继续在onSubmit中返回(在我的情况下为false)后引用DOM中的登录表单。有没有办法“监听”onSubmit事件才能完成,所以我可以安全地从DOM中删除登录表单?
修改
@BuffaloBuffalo - 我尝试了你的例子并在onSubmit this.validate()中调用了dojo.xhrPost。
onSucessFunction在返回到dojo.xhrPost之后的语句之前接收到控制并完成了处理,这是onSubmit事件的返回false。回顾一下,this.validate()为true,登录表单由dojo验证,onSuccessFunction接收控件,如示例所示。但是,我不是隐藏登录DOM,而是使用下面的dojo 1.7.3 AMD语法完全删除它:
var loginDOMnode = dom.byId("Login");
array.forEach(registry.findWidgets(loginDOMnode), 'item.destroyRecursive(true)');
domConstruct.empty(loginDOMnode);
我正在使用IE 9,我收到以下错误:
SCRIPT5007:无法获取属性“value”的值:object is null或undefined ValidationTextBox.js,第14行第1个字符
因为我从DOM中删除了登录表单后从onSubmit返回了false.validate(),看来我在使用ValidationTextBox完成dojo之前将其从DOM中删除。从onSubmit this.validate()返回false后,有没有办法让onSucessFunction运行?
答案 0 :(得分:1)
如果您使用ajax(例如xhrPost)提交登录过程,则需要侦听该异步事件的返回。在您的自定义表单中:
onSubmit:function(e){
//stop event
dojo.stopEvent(e);
//validate your form
var onSucessFunction = function(){
//hide login dom
};
var onErrorFunction = function(){
//show an error
};
dojo.xhrPost({
//parameters
}).then(onSucessFunction,onErrorFunction);
},