SubmitHandler's job is to submit the form, not register the form submit event handler.
SendHandler is called when the formm submit event is fired in your case, and not in the form that you registered with the submit handler, so when the form submit event is fired for the first time, the form is not submitted. when it is run a second time, the dispatch event is first processed by the validator, and then the handler that you registered fires an ajax request.
In submitHandler you just need to send an ajax request, there is no need to register an event handler
$("#add-form").validate({ submitHandler: function (form) { // setup some local variables var $form = $(form); // let select and cache all the fields var $inputs = $form.find("input, select, button, textarea"); // serialize the data in the form var serializedData = $form.serialize(); // let disable the inputs for the duration of the ajax request $inputs.prop("disabled", true); // fire off the request to /form.php request = $.ajax({ url: "forms.php", type: "post", data: serializedData }); // callback handler that will be called on success request.done(function (response, textStatus, jqXHR) { // log a message to the console console.log("Hooray, it worked!"); alert("success awesome"); $('#add--response').html('<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">×</button><strong>Well done!</strong> You successfully read this important alert message.</div>'); }); // callback handler that will be called on failure request.fail(function (jqXHR, textStatus, errorThrown) { // log the error to the console console.error( "The following error occured: " + textStatus, errorThrown); }); // callback handler that will be called regardless // if the request failed or succeeded request.always(function () { // reenable the inputs $inputs.prop("disabled", false); }); } });
Arun P Johny
source share