javascript - e.preventDefault(); 有多危险,是否可以用 keydown/mousedown tracking 代替?

标签 javascript jquery google-analytics analytics jquery-events

我正在为相当复杂的 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(); 的使用,在我看来,这消除了我可能阻止表单成功提交的风险.

那么,我的问题是:

  • 是否可以考取标准 形成跟踪代码段并阻止它 从曾经完全阻止表格 从提交?
  • 是 mousedown/keydown 替代方案可行吗?
  • 是否有任何可能遗漏的提交案例?具体来说,除了鼠标和键盘回车还有其他方法可以结束提交吗?在开始卸载页面之前,浏览器是否总是有时间处理 javascript?

最佳答案

Googleplex 的那些家伙非常聪明,他们认为总有一天会发生这样的事情,现在,果然,它发生了。你为什么不试一试:

$('form').submit(function(e){
  e.preventDefault();
  var form = this; 
  _gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
  //...do some other tracking stuff...
  _gaq.push(function(){
     form.submit();
    });
  });

_gaq.push thigamajigger 按顺序执行其元素,所以您应该没问题。

不,我不知道我为什么突然开始这样说话。

关于javascript - e.preventDefault(); 有多危险,是否可以用 keydown/mousedown tracking 代替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4551218/

相关文章:

用于 Google BigQuery 的 SQL 查询来计算 session 和网页浏览量

javascript - 旋转 90/-90 度的图像模糊 jquery 旋转

javascript - 实验的转化率完全错误

javascript - 列表扩展器不工作

javascript - 替换 scriptlet 以避免 .jsp 文件内出现 java 代码

Javascript (jQuery) 删除长文本的最后一句

javascript - 如何在 jQuery 中存储多次点击事件的 PHP session 值?

javascript - 谷歌分析 : XHR instead of pixel-tracking

javascript - 循环遍历 javascript 中的一组正则表达式

javascript - 如何重置在整个页面中应用的 jQuery 切换类? ( Angular 元素)