[SalesForce] Lightning component – event.preventDefault()

I have a lightning component which has a form using lightning:recordEditForm and when the user clicks submit I call an apex method which can return error message.

So if the method returns an error message – I don't want the submit to happen so I'm using event.preventDefault().
The problem is that when the method returns success – the submit doesn't happen (should update some fields).

How do I force-submit it ?
Or maybe I'm using the event.preventDefault() functionality wrong.

submit: function(component, event, helper) {

        var record = component.get("v.record");       
        var recordFields = component.get("v.recordFields");
        var isAttachmentRequired = component.get("v.isInputFileRequired");

        var action = component.get("c.submitHandover");
        action.setParams({ 
            handover : recordFields,
            isAttachmentRequired : isAttachmentRequired
        });

        action.setCallback(this, function(response) {
            helper.hideSpinner(component);
            var state = response.getState();
            console.log("state: " + state);

            if (state === "SUCCESS") {
                var res = response.getReturnValue();
                console.log("res: "+res)

                if (res == "SUCCESS"){
                    component.find("submitForm").submit();
                    helper.showToast(component);
                }
                else{
                    component.set("v.isValidationError",true);
                    component.set("v.messageType","error");
                    component.set("v.message", res);
                }

            }
            else {
                console.log("state is not succeess");
                var errors = response.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        console.log("Error message: " + 
                                 errors[0].message);
                        component.set("v.isValidationError",true);
                        component.set("v.messageType","error");
                        component.set("v.message", errors[0].message);
                    }
                } else {
                    console.log("Unknown error");
                    component.set("v.isValidationError",true);
                    component.set("v.messageType","error");
                    component.set("v.message", "Unknown error");
                }
            }
        });

        event.preventDefault();
        $A.enqueueAction(action);
        helper.showSpinner(component);
   }

Best Answer

I dug out an old demo implementation where I did something similar - I ended up using something like:

event.preventDefault(); // stop form submission
let eventFields = event.getParam("fields");
component.find("theForm").submit(eventFields);

Where theForm is the aura:id of the lightning:recordEditForm

Related Topic