2012-08-02 56 views
1

我想爲我的應用程序登錄使用dijit.form.Form,允許dojo執行表單驗證並使用xhrPost提交表單。我相信這可以通過覆蓋onSubmit事件並使用this.validate()來驗證登錄表單來完成。Dojo Form on提交事件

爲了成功登錄,我如何知道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,其實我完全低於道場1.7.3 AMD語法刪除:

var loginDOMnode = dom.byId("Login"); 
    array.forEach(registry.findWidgets(loginDOMnode), 'item.destroyRecursive(true)'); 
    domConstruct.empty(loginDOMnode); 

我使用的IE 9,我得到以下錯誤:

SCRIPT5007: Unable to get value of the property 'value': object is null or undefined ValidationTextBox.js, line 14 character 1

由於在我從DOM中刪除登錄表單之後,我從onSubmit this.validate()返回false,似乎我在dojo完成了ValidationTextBox之前將它從DOM中刪除。在onSubmit this.validate()返回false後,有沒有辦法讓onSucessFunction運行?

回答

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

},

+0

感謝您的及時回覆。請參閱上面的編輯。 – railser 2012-08-02 23:29:57

+0

問題解決了!進一步審查後,我意識到我正在使用一個同步xhrPost,並應該使用異步xhrPost。我設置同步:錯誤,一切按預期工作。謝謝您的回覆。 – railser 2012-08-03 00:35:17