如何将回调传递给jQuery .click()?甚至是我需要的回调?

时间:2012-11-19 22:44:50

标签: jquery callback

我有一个点击事件,根据下拉选择将用户带到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事件?或者我完全走错了轨道?对此问题的任何解决方案表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

您需要阻止默认操作:

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

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