jquery.submit 事件函数

jquery.submit function with event

我们正在用 google recaptcha v3 编写一个表单。表单需要在实际提交之前获取令牌。一位同事编写了这段代码并且它有效,表单提交没有任何问题。但我很困惑为什么它会起作用?为什么在递归调用 .submit() 函数时它不会陷入无限循环?

jQuery.fn.extend({
  grecaptcha: function (options) {
    this.submit(function (e) {
      e.preventDefault();
      var key = options["recaptcha_site_key"];
      var acdata = options["action_data"];
      var ele = this;
      grecaptcha.execute(key, { action: acdata }).then(function (token) {
        $("<input>")
          .attr({
            type: "hidden",
            name: "g-recaptcha-response",
            value: token,
          }).appendTo($(ele));
        ele.submit();
      });
    });
  },
});
$("#formID").grecaptcha(option);

是否有其他更好的方法在提交前请求令牌?

每个: https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit

This method is similar, but not identical to, activating a form's submit . When invoking this method directly, however:

No submit event is raised. In particular, the form's onsubmit event handler is not run.

您的代码示例未调用 jQuery 方法来触发表单上的提交事件。事实上,这会导致循环。尝试包装 ele 变量 jQuery。 $(ele).submit () 应该会导致循环。通过不在 jQuery 对象中包装对 this (e.currentTarget) 的引用,而是调用 DOM 提交函数,您提交表单时不会触发事件或 运行 处理程序。

有道理吗?