重新触发Javascript事件是否安全

Is it safe to re-trigger a Javascript event?

本文关键字:是否 安全 事件 Javascript 新触发      更新时间:2024-01-17

我正在使用Google Analytics,希望跟踪某些表单上的表单提交。我想确保在表单提交之前完成对Analytics的调用,否则Analytics可能不会注册事件。我的应用程序已经有一堆提交时发生的代码(可能通过ajax提交表单,在popover中打开结果,等等)。

我的计划是收听表单上的submit事件,通过分析跟踪提交(如果表单具有正确的类),然后重新编写原始事件以继续进行正常的表单处理。这是第一个必须提交的侦听器,所以它应该在其他侦听器之前启动。这样做有效吗?这样做安全吗?

这是我的代码:

$('form').on('submit', function(event) {
  var form = $(this);
  if (form.hasClass('ga-event') && !event._ga_event_sent)
  {
    ga('send', {
      hitType: 'event',
      eventCategory: form.data('category'),
      eventAction: form.data('action'),
      eventLabel: form.data('label'),
      hitCallback: function() { // analytics calls this when its done
        event._ga_event_sent = true;
        form.trigger(event);
      }
    });
    return false;
  }
  // do other onSubmit stuff here
});

重新触发JavaScript事件是否安全?

在这种情况下,没有。您触发了与您侦听的事件相同的事件,导致无限循环

更新#1:

来自@lyoshenka的评论:

我想重新启动jquery事件的原因是,我想在表单提交时做其他事情(如有必要,确认提交,通过ajax提交等),这些事情仍然需要在表单实际提交之前,但在GA事件记录之后进行。

感谢您提供最新信息。你的问题不清楚这一点。

假设您的基本工作流程是:

  1. 向Google Analytics发送请求
  2. 更多验证+AJAX
  3. 提交表单

我建议只使用一个submit事件处理程序来处理这三件事。根本问题是,您有这三个主要的代码片段,它们需要按照特定的顺序运行,但它们并不了解彼此。相反,将该逻辑整合到一个submit事件处理程序中,使您能够细粒度地控制如何完成这些事情——尤其是因为您需要执行多个异步操作。

$('form').on('submit', function(event) {
  event.preventDefault();
  var form = $(this);
  var otherSubmitActions = function() {
    // Do other validations, AJAX, etc.
    // Then in the final callback for your AJAX:
    // form[0].submit();
  };
  if (form.hasClass('ga-event')) {
    ga('send', {
      hitType: 'event',
      eventCategory: form.data('category'),
      eventAction: form.data('action'),
      eventLabel: form.data('label'),
      hitCallback: otherSubmitActions // analytics calls this when its done
    });
  } else {
    otherSubmitActions();
  }
});