我有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函数来暂停表单提交来模仿这个。这似乎不起作用,表格提交的速度尽可能快。