I have a form with an onsubmit attribute. I need to bind a new submit event and I need this one to be executed before any existing submit functions.

The following code demonstrates the problem.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
      jQuery(function($) {
        // a plugin
        $('form').submit(function() {
          alert("Second");
        });
        // an other plugin
        $('form').submit(function() {
          alert("Third");
        });

        // this event must always be executed as first event
        $('form').submit(function() {
          alert("Always First");
        });
      });
    </script>
  </head>
  <body>
    <form onsubmit="javascript:alert('Fourth');">
      <p>
        <input type="submit">
      </p>
    </form>
  </body>
</html>

If you execute the script, first you get "Second", then "First".

Is is possible to bind a new submit event and specify whether the function must be called before any existing event?

Constraints:

  • Existing events must be preserved.
  • I can't remove existing events because the content of the onsubmit attribute contains a quite complex logic written by Rails
  • (ADDED): the event should always be executed before any existing onsubmit event and already binded events (perhaps binded by an other plugin)

Any idea?

Edit
Report