2012-11-19 18 views
2

我有一個點擊事件,使用戶根據下拉選擇的URL。但是,在重定向用戶之前,我想調用標記腳本來捕獲用戶所做的選擇。這是第三方腳本,所以我認爲我遇到了一些計時問題。如何將回調傳遞給jQuery .click()?即使我需要什麼回調?

這裏是我的代碼:

$('#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); 
    }); 

大約一半一切正常的時間。該標籤被捕獲並且用戶被成功重定向。但是,另一半時間點擊事件會引發錯誤,因爲對象「s」未定義。我假設這是由於定時問題,其中location.href在定義「s」對象之前觸發。

我的問題是,我是否想創建一個回調,以便location.href不會發生,直到設置標籤後?我不喜歡使用setTimeout,因爲時間對我來說是任意的。我寧願確保重定向始終等待,直到標籤被觸發。

我想將回調函數傳遞給click事件嗎?或者我完全在錯誤的軌道上?任何解決這個問題的方法都會受到讚賞謝謝!

+0

在哪裏定義? – jtheman

+0

「s」在第三方標記腳本中定義。所以我想我真正需要的是等待外部腳本完全加載。 –

回答

2

您需要防止默認動作:

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

不過,我建議不要以這種方式攔截單擊事件,因爲它會阻止用戶在新窗口中打開鏈接,如果他們想。最好將它們發送到進行跟蹤的重定向頁面。