In a general sense, event handlers will be called in the order in which they were connected, but only if they are connected at the same level. In your case, you bind one directly to the form, and the other a delegated handler, linked at the document.body level. A directly connected one will happen first, and then the event bubbles up to be processed by the other.
If you bind both handlers at the same level with .delegate() , then they should be called in the order:
$(document.body).delegate('form', 'submit', methods.checkForm); $(document.body).delegate('form', 'submit', methods.submitFormIfCheckedFormIsTrue);
Then in the first (general) handler, you must call the event.stopImmediatePropagation() method to prevent other handlers from being called (noting that just returning false prevents the default and stops the event, increasing, but does not stop the execution of other handlers at this level):
methods.checkForm = function (e) { if (!$(this).isVerified()) { e.stopImmediatePropagation(); return false; } return true; };
(By the way, the code shown in the question left the event (second parameter) from the .delegate() call - I entered it in my code.)
Or bind both handlers directly, rather than using .delegate() . Speaking of using .delegate() , if you are using the latest version of jQuery, you can switch to using .on() new do-all event binding method.
"It happens that the submitFormIfCheckedFormIsTrue function runs before or during the checkForm function"
Definitely earlier, not during. (In almost all browsers) JavaScript runs in a single thread, so you wonโt run two functions at the same time.