所以我基本上有一个.click事件,即e.preventDefault()。但是,一旦代码完成执行,我希望它在解除绑定后重新执行该事件。
所有这一切的背景是,我正在尝试使用谷歌分析(analytics.js)设置出站链接事件跟踪。
<a href="http://www.example.com/" id="link1"><img /></a>
<script>
$("#link1").click(function(e) {
e.preventDefault();
ga('send', 'event',
'category',
'action',
'label',
{
'hitCallback': function() {
$(this).unbind(e).trigger("click");
}
}
);
});
</script>
此设置是必需的,否则页面会在事件发送之前终止。 此外,我想使代码片段尽可能独立,因为这个脚本将被复制粘贴到很多地方。
我希望有类似e.sleepDefault()的东西;和e.wakeDefault();
答案 0 :(得分:2)
试试这个:
$("#link1").click(function(e) {
e.preventDefault();
var url = $(this).prop('href');
ga('send', 'event',
'category',
'action',
'label',
{
'hitCallback': function() {
window.location = url;
}
}
);
});
答案 1 :(得分:1)
好的,经过大量的研究,我意识到我的问题特别是jQuery不允许你跟踪链接而不实际点击它们,因此你无法真正重新诅咒点击和希望它遵循链接。当你这样做时,它充当“模拟”点击,因此它实际上不会跟随href,但它将执行处理程序中的所有其他操作。
解决方案是使用javascript的原生click(),它不关心并会跟随链接。
所以这就是我的代码:
<a href="http://www.example.com/" id="link1"></a>
<script>
$("#link1").click(function(e) {
var obj = $(this);
e.preventDefault();
ga('send', 'event',
'category',
'action',
'label',
{
'hitCallback': function() {
obj.off(e);
obj[0].click();
}
}
);
});
</script>
所以这是细分:
关键是将{jQuery对象转换为htmlDomObject的[0]
,它允许您使用本机javascript click()而不是jQuery click(),就像我说的那样,不跟随LINKS。强>