我有一个点击事件,根据下拉选择将用户带到URL。但是,在我重定向用户之前,我想调用标记脚本来捕获用户所做的选择。这是第三方脚本,因此我认为我遇到了一些时间问题。
这是我的代码:
$('#submitCity').click(function(){
//trigger tags
var countrySelected = $country.val();
var citySelected = $city.val();
s.linkTrackVars='prop3,prop4,eVar3,eVar4,eVar6';
s.prop3 = 'Visitor Action';
s.prop4 = 'Home City Selected - ' + countrySelected + ', ' + citySelected;
s.eVar3 = 'Visitor Action';
s.eVar4 = 'Home City Selected - ' + countrySelected + ', ' + citySelected;
s.tl(this,'o','Home City Selected - ' + countrySelected + ', ' + citySelected);
//Link to appropriate city
setTimeout(function() {
location.href = "http://www.someURL.com/" + citySelected;
}, 1000);
});
大约一半的时间一切都按预期工作。捕获标记并成功重定向用户。但是,另一半时间,click事件会抛出错误,因为对象“s”未定义。我假设这是由于定时问题导致location.href在定义“s”对象之前触发。
我的问题是,我是否要创建一个回调,以便在设置标记之后才会发生location.href?我不喜欢使用setTimeout,因为时间对我来说是随意的。我宁愿确保重定向始终等待,直到标签被触发。
我是否要将回调函数传递给click事件?或者我完全走错了轨道?对此问题的任何解决方案表示赞赏。谢谢!
答案 0 :(得分:2)
您需要阻止默认操作:
$('#submitCity').click(function(event){
event.preventDefault();
但是我建议不要以这种方式拦截click事件,因为它会阻止用户在新窗口中打开链接。最好将它们发送到进行跟踪的重定向页面。