是否可以在任何现有的 onsubmit/submit 之前绑定一个 Submit() 函数?

2024-03-13

我有一个表格onsubmit属性。我需要绑定一个新的提交事件,并且需要在任何现有的提交函数之前执行该事件。

下面的代码演示了这个问题。

<!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>

如果执行脚本,首先会得到“Second”,然后是“First”。

是否可以绑定一个新的提交事件并指定是否必须在任何现有事件之前调用该函数?

限制条件:

  • 必须保留现有事件。
  • 我无法删除现有事件,因为事件的内容onsubmitattribute包含Rails编写的相当复杂的逻辑
  • (添加):该事件应始终在任何现有的 onsubmit 事件和已绑定的事件(可能由其他插件绑定)之前执行

任何想法?


内联提交事件首先触发,您可以获得对它的引用,使onsubmit属性上的form元素,然后绑定你的新提交事件,这个将执行你的old提交处理程序:

  jQuery(function($) {
    var form = $('form'), oldSubmit = form[0].onsubmit;
    form[0].onsubmit = null;

    $('form').submit(function() {
      alert("First");
      oldSubmit.call(this); // preserve the context
    });
  });

请注意,我使用call方法来调用旧的提交处理程序,这是为了保留this该函数内的关键字,它将是form元素本身。

如果你原来的onsubmithandler 有一些验证行为,您可以通过以下方式获取其返回值var ret = oldSubmit.call(this);

检查上面的例子here http://oldSubmit.call(this);.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在任何现有的 onsubmit/submit 之前绑定一个 Submit() 函数? 的相关文章

随机推荐