1

I would like to use a dijit.form.Form for my application login, allow dojo to perform the form validation and use xhrPost to submit the form. I believe this can readily be done by over-riding the onSubmit event and using this.validate() to validate the login form.

For successful login, how can I tell when the onSubmit event is done so I can safely remove the login form from the DOM?

From the documentation it appears that dojo (validate?) may continue to reference the login form in the DOM after returning (false in my case) from onSubmit. Is there a way to "listen" for the onSubmit event to complete so I can safely remove the login form from the DOM?

EDIT

@BuffaloBuffalo - I tried your example and called dojo.xhrPost within the onSubmit this.validate().

The onSucessFunction received control and completed processing prior to returning to the statement after dojo.xhrPost which is the return false from the onSubmit event. To recap, this.validate() was true, the login form was validated by dojo and the onSuccessFunction received control as shown in your example. However, rather than hide the login DOM, I actually remove it completely with dojo 1.7.3 AMD syntax below:

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

I am using IE 9 and I get the following error:

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

Since I return false from onSubmit this.validate() after I remove the login form from the DOM, it appears that I am removing it from the DOM before dojo is done with the ValidationTextBox. Is there a way to have the onSucessFunction run after I return false from onSubmit this.validate()?

4

1 回答 1

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

},

于 2012-08-02T19:18:12.323 回答