启动单击后,事件侦听器无法执行2个函数

时间:2018-04-19 11:36:04

标签: javascript addeventlistener

我有6个按钮,每个按钮都有事件监听器。对于任何给定的按钮,我有点击事件当前触发跟踪事件,然后提交隐藏的表单。这大部分时间都有效,但偶尔跟踪事件不会触发。表格总是提交。我的代码:

var executeTracking = function(){
    tracking.track();
}
var buttons = document.getElementsByClassName('form-submit-button');
buttons[0].addEventListener('click', function(){
   executeTracking();
   submitForm();
}

在适用于Chrome的桌面上,这始终可以正常运行。在Firefox上,它不会在10%的时间内触发第一个函数。在移动旅行中也一样。一旦提交表单,回到页面后,有时似乎不能正常工作。

我一直在努力重新加载页面。我已经尝试将javascript直接放在HTML文件中。我尝试过使用setTimeouts。我也尝试过像这样的回调:

var submitForm = function(self) {
    // alert('form')
    self.parentNode.getElementsByTagName('form')[0].submit();
}
var fireTracking = function(cta, self, callback) {
    // alert('mixpanel')
    tracking.track();
    callback(self);
}
var buttons = document.getElementsByClassName('form-submit-button');
buttons[0].addEventListener('click', function(){
    fireTracking(cta, this, submitForm);
}, true);

尽管表单总是提交,但跟踪事件并不总是在所有设备上触发(firefox桌面和Safari手机并不总是在提交之前运行跟踪事件)。

最后,当我运行当前已注释掉的Alert功能时,一切正常。就好像代码中的暂停允许跟踪功能执行一样。我试图通过设置setTimeout函数来暂停表单提交来模仿这个。这似乎不起作用,表格提交的速度尽可能快。

0 个答案:

没有答案