2012-11-19 4 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); 
    }); 

:

여기 내 코드입니다. 태그가 캡처되고 사용자가 성공적으로 리디렉션됩니다. 그러나 나머지 부분 인 click 이벤트는 객체 "s"가 정의되지 않았기 때문에 오류를 발생시킵니다. 나는 이것이 "s"객체가 정의되기 전에 location.href가 시작되는 타이밍 문제로 인한 것이라고 가정하고 있습니다.

내 질문은 location.href가 태그가 설정 될 때까지 발생하지 않도록 콜백을 만들고 싶습니다. 나는 타이밍이 나에게 임의적이라고 느끼기 때문에 setTimeout을 사용하는 것을 좋아하지 않는다. 차라리 태그가 실행될 때까지 리디렉션이 항상 대기하는지 확인하고 싶습니다.

클릭 이벤트에 콜백 함수를 전달하고 싶습니까? 아니면 내가 잘못된 길로 빠져 있니? 이 문제에 대한 해결책은 높이 평가됩니다. 감사!

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

그러나 나는 그들이 원하는 경우 새 창에서 링크를 열지 못하도록 때문에이 방법으로 클릭 이벤트를 차단에 대해 추천 :

+0

여기서 정의 된 것은 무엇입니까? – jtheman

+0

"s"는 타사 태그 스크립트에 정의되어 있습니다. 그래서 내가 정말로 필요한 것은 외부 스크립트가 완전히로드 될 때까지 기다리는 것입니다. –

답변

2

당신은 기본 동작을 방지 할 필요가있다. 추적 대신 리디렉션 페이지로 전송하는 것이 좋습니다.

관련 문제