【发布时间】:2011-05-31 21:00:20
【问题描述】:
我正在为一个相当复杂的 CRM 编写跟踪脚本,用于跟踪 Google Analytics 中的表单操作。我试图平衡准确跟踪表单操作的愿望与需要永远不会阻止表单不工作。
现在,我知道这样做是行不通的。
$('form').submit(function(){
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
});
DOM 在有机会处理之前卸载。
所以,很多示例代码都推荐这样的东西:
$('form').submit(function(e){
e.preventDefault();
var form = this;
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
//...do some other tracking stuff...
setTimeout(function(){
form.submit();
}, 400);
});
这在most cases 中是可靠的,但它让我感到紧张。如果在e.preventDefault(); 和我开始触发基于 DOM 的提交之间发生了什么事怎么办?我完全破坏了表格。
我一直在探索其他一些分析实现,我注意到something like this:
$('form').mousedown(function(){
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
});
$('form').keydown(function(e){
if(e.which===13) //if the keydown is the enter key
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
});
基本上,与其中断表单提交,不如通过假设有人按下鼠标或按下 Enter 键来抢占它,然后提交该表单。显然,这会导致一定数量的误报,但它完全消除了e.preventDefault(); 的使用,在我看来,这消除了我可能会阻止表单成功提交的风险。
所以,我的问题:
- 是否可以采取标准 形成跟踪 sn-p 并防止它 从 ever 完全阻止表单 从提交?
- 是 mousedown/keydown 替代方案可行吗?
- 是否有可能遗漏的提交案例?具体来说,除了鼠标和键盘输入,还有其他的提交方式吗?在开始卸载页面之前,浏览器是否总是有时间处理 javascript?
【问题讨论】:
标签: javascript jquery google-analytics analytics jquery-events