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);
    });

約半分の時間で、すべてが期待どおりに機能します。タグがキャプチャされ、ユーザーが正常にリダイレクトされます。ただし、残りの半分の時間では、オブジェクト「s」が定義されていないため、クリック イベントがエラーをスローします。これは、「s」オブジェクトが定義される前に location.href が起動するというタイミングの問題によるものだと思います。

私の質問は、タグが設定されるまで location.href が発生しないようにコールバックを作成しますか? タイミングが恣意的に感じられるので、 setTimeout を使用するのは好きではありません。タグが起動されるまでリダイレクトが常に待機するようにしたいと思います。

クリック イベントにコールバック関数を渡しますか? それとも、私は完全に間違った方向に進んでいますか? この問題の解決策は大歓迎です。ありがとう!

4

1 に答える 1

2

デフォルトのアクションを防止する必要があります。

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

ただし、この方法でクリック イベントをインターセプトしないことをお勧めします。これは、ユーザーが望む場合に新しいウィンドウでリンクを開くことができなくなるためです。代わりに、追跡を行うリダイレクト ページに送信することをお勧めします。

于 2012-11-19T22:46:11.303 に答える