带有事件的jquery.submit函数

问题描述 投票:0回答:1

我们正在使用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);

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

html jquery forms onsubmit recaptcha-v3
1个回答
0
投票

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

此方法与激活表单的Submit类似,但不相同。但是,当直接调用此方法时:

没有引发提交事件。特别是,表单的onsubmit事件处理程序不会运行。

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

了解吗?

© www.soinside.com 2019 - 2024. All rights reserved.