【问题标题】:Dojo Form onSubmit EventDojo 表单 onSubmit 事件
【发布时间】:2012-08-02 17:36:00
【问题描述】:

我想使用dijit.form.Form 登录我的应用程序,允许dojo 执行表单验证并使用xhrPost 提交表单。我相信这可以通过覆盖onSubmit 事件并使用this.validate() 验证登录表单来轻松完成。

为了成功登录,我如何知道onSubmit 事件何时完成,以便我可以安全地从 DOM 中删除登录表单?

从文档看来,dojo(验证?)可能会在从 onSubmit 返回(在我的情况下为 false)后继续引用 DOM 中的登录表单。有没有办法“监听”onSubmit 事件的完成,以便我可以安全地从 DOM 中删除登录表单?

编辑

@BuffaloBuffalo - 我尝试了您的示例并在 onSubmit this.validate() 中调用了 dojo.xhrPost。

onSucessFunction 在返回到 dojo.xhrPost 之后的语句之前接收控制并完成处理,这是 onSubmit 事件的返回 false。回顾一下,this.validate() 为真,登录表单由 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”的值:对象是 null 或未定义 ValidationTextBox.js,第 14 行字符 1

由于我在从 DOM 中删除登录表单后从 onSubmit this.validate() 返回 false,看来我是在使用 ValidationTextBox 完成 dojo 之前将其从 DOM 中删除。在我从 onSubmit this.validate() 返回 false 后,有没有办法让 onSucessFunction 运行?

【问题讨论】:

    标签: dojo


    【解决方案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);
    

    },

    【讨论】:

    • 感谢您的及时回复。请参阅上面的编辑。
    • 问题解决了!经过进一步审查,我意识到我使用的是同步 xhrPost,并且应该使用异步 xhrPost。我设置了 sync: false 并且一切都按预期工作。感谢您的回复。
    猜你喜欢
    • 2012-04-09
    • 2013-02-19
    • 2015-11-27
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多