2

我有一个点击事件,它根据下拉选择将用户带到一个 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,因为时间对我来说是任意的。我宁愿确保重定向总是等到标签被触发。

我想将回调函数传递给点击事件吗?还是我完全走错了路?对此问题的任何解决方案表示赞赏。谢谢!

4

1 回答 1

2

您需要防止默认操作:

$('#submitCity').click(function(event){
    event.preventDefault();

但是我建议不要以这种方式拦截点击事件,因为它会阻止用户在他们想要的情况下在新窗口中打开链接。最好将它们发送到进行跟踪的重定向页面。

于 2012-11-19T22:46:11.303 回答