Dojo表单onSubmit事件

时间:2012-08-02 17:36:01

标签: dojo

我想使用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运行?

1 个答案:

答案 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);

},