3

我動態創建的JavaScript並將其連接到使用$我的頁面上的鏈接onclick事件(文件)。就緒()jQuery的ATTR芬克在IE

我的onclick使用JavaScript生成事件的功能,我傳遞給Google Analytics來跟蹤我的網頁上的事件,例如橫幅廣告點擊和下載的PDF。我在Google Analytics中爲除IE以外的每個瀏覽器的這些事件獲取統計信息。所以,我的代碼在IE中出現了一些問題(我在我的頁面上搜索並搜索了錯誤,但沒有發現)。

一般情況下我只是做類似$(「A」)。點擊...做的東西......但不管是什麼原因,我能得到谷歌分析事件追蹤工作的唯一方法是通過將跟蹤事件功能直接在我的鏈接上。所以我用下面的代碼注入追蹤事件功能進入我的鏈接的onclick一旦頁面加載....

// Tracks favorites on the home page. 
    $("._gatHomePageFavorites").each 
    (
     function(index) 
     { 
      var description = "Content ID: " + getParameterNamedID($(this).attr("href")) + " - " + $(this).children().first().attr("alt"); 
      $(this).attr("onclick","alert('1');_gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click','" + _gatCleanString(description) + "']);alert('2');"); 
     } 
    ); 

我想我的問題是,IE瀏覽器是不是把我的代碼上的onclick。但我不知道在IE中查看生成的源代碼的好方法。我已經在地址欄中嘗試了幾個JavaScript函數來調出生成的源代碼,假設它們正常工作,那麼我的代碼不會將跟蹤事件功能注入到IE的鏈接的onclick中。我在Firefox的視圖生成源中查看onclick中的跟蹤事件功能。

至於另一項測試,你可以看到我加在我的跟蹤事件功能可按警報。在FF中,兩個警報均觸發,在IE中都沒有警報觸發器。

還有一個一塊信息。我的Google Analytics(分析)不會記錄任何IE瀏覽器的事件。據我所知,我的問題不是特定於一個版本的IE。

我怎麼能知道我的動態JavaScript是進入的onclick的IE瀏覽器,然後我能做些什麼來讓它進入的onclick的IE?

UPDATE 爲了簡化問題並集中解答的方向,我刪除了Google Analytics事件函數。現在,我所做的只是將alert()注入onlick。 IE甚至不會觸發警報()。我曾嘗試以下...

// Tracks favorites on the home page. 
    $("._gatHomePageFavorites").each 
    (
     function(index) 
     { 
      $(this).attr("onclick","alert('1')"); 
     } 
    ); 

// Tracks favorites on the home page. 
    $("._gatHomePageFavorites").each 
    (
     function(index) 
     { 
       $(this).attr("onclick","setTimeout(\"alert('1')\", 1000);return false"); 
     } 
    ); 

所以我還是對我的javascript倚沒有被注入到IE中的onclick。

什麼是IE瀏覽器來查看生成的源最可靠的方法是什麼?

如果我可以確認我的代碼沒有被注入鏈接的onclick屬性,那麼我至少可以回答Google Analytics爲什麼不跟蹤IE的事件。這將是因爲我注入的代碼不存在於IE中。

+0

嘗試在document.ready之後和掛鉤之前添加100ms超時.click() – 2012-01-05 16:11:56

+0

如果鏈接正在離開頁面,則未獲取統計信息可能會對競爭條件做出反應。 – epascarello 2012-01-05 16:29:51

+0

我想過這個,但我想如果我添加alert()到onclick,我不會嘗試這種延遲破解。如果我在鏈接的onclick事件中有alert(),alert()應該觸發,而不需要延遲。但是......我一直試圖弄清楚這個問題很久,所以我會試試看。 – user1132517 2012-01-05 16:37:51

回答

4

你不應該添加的「onClick」 ATTR,而是利用這個使用jQuery .click()事件。

function(index){ 
    var description = "Content ID: " + getParameterNamedID($(this).attr("href")) + " - " + $(this).children().first().attr("alt"); 
    $(this).click(function() { 
     alert('1'); 
     _gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click', _gatCleanString(description)]); 
     alert('2'); 
    }); 
} 

類似上面,不好意思寫了這個快,所以可能有一個錯字。

+0

他無法做到這一點 - 它打破了谷歌分析(以某種方式)。 – 2012-01-05 16:16:28

+0

看不出來,從我的部分錯別字,它應該工作,一些參考:http://www.wduffy.co.uk/blog/tracking-google-goals-with-no-url-using- jquery/ – Jakub 2012-01-05 16:19:21

+0

Adam是正確的,我不能那樣做,因爲它以某種方式打破了Google Analytics(分析)。當我將他們的跟蹤事件功能直接放在鏈接上時,我可以獲得統計數據。當我把相同的跟蹤事件函數放在$(「a」)。click()中時,我沒有統計數據。 – user1132517 2012-01-05 16:26:57

0

機會渺茫,但如果你有任何的VBScript您的網頁上,那麼你應該在前面加上你的onclick字符串「JavaScript的:」

+0

沒有VBScript,但是無論如何這個前置的想法是值得的。我也會嘗試。 – user1132517 2012-01-05 16:51:03

+0

我添加了javascript:它沒有幫助。 – user1132517 2012-01-05 17:13:06

0

你可以只使用經過時間考驗的DOM0 onclick財產,但真的沒有像樣的理由爲什麼jQuery的click()方法不起作用。

$("._gatHomePageFavorites").each 
    (
     function(index) 
     { 
      var $this = $(this); 
      var description = "Content ID: " 
       + getParameterNamedID($this.attr("href")) + " - " 
       + $this.children().first().attr("alt"); 

      this.onclick = function() { 
       alert('1'); 
       _gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click', 
        _gatCleanString(description)]); 
       alert('2'); 
      }; 
     } 
    ); 

jQuery的attr()方法通常沒有用,但這是一個完全不同的咆哮。

+0

我饒有興趣地談論了attr()。我總是使用jQuery的click()。但是我無法登錄Google Analytics事件功能,除非它在鏈接onclick屬性上內聯。你的建議是有效的this.onclick。這是一個很難測試。我必須執行它,然後等待,看看我是否在GA中獲得統計數據。 – user1132517 2012-01-05 17:28:13

0

要注意跟蹤鏈接的一點是,如果瀏覽器在獲取跟蹤像素之前離開頁面,則可能無法記錄該事件,具體取決於瀏覽器,計算機,網絡速度。我有好運氣與以下(從@Tim Down's代碼修改):

$("._gatHomePageFavorites").each 
    (
     function(index) 
     { 
      var $this = $(this); 
      var description = "Content ID: " 
       + getParameterNamedID($this.attr("href")) + " - " 
       + $this.children().first().attr("alt"); 
      $this.click(function(e) { 
       alert('1'); 
       _gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click', 
        _gatCleanString(description)]); 
       if ($this.attr('target') != '_blank') { 
        e.preventDefault(); 
        setTimeout('document.location = "' + $this.attr('href') + '"', 150); 
       } 
      }); 
     } 
    ); 

本質上講,如果鏈接不是在新窗口中打開,等待和遵循它自己。

0

事實證明,我的問題與Google Analytics或其跟蹤事件無關。經過大量測試後,我最終確定在IE中,jQuery的$()。attr()不起作用。

奇怪的是,它沒有打破或拋出一個錯誤。 IE只是以某種方式忽略它,並不會將我的動態JavaScript添加到錨標記的onclick參數。

解決方案...

  1. 明顯的一個是綁定到事件像其他人建議。如果你可以使用$()。click(),那麼我同意,總是使用它。切勿使用$()。attr(「onclick」,「做某事」);

  2. 但是,在我的項目中的其他情況阻止我使用$()。click()。除非事件跟蹤功能內嵌在定位標記上,否則我無法使用Google Analytics的事件跟蹤功能獲取Google Analytics的統計信息。

走到老同學......

$(".obj").each 
     (
      function (index) { 

       this.setAttribute("onclick", "alert('It is Working');"); 

      } 
     ); 

感謝大家的幫助。

+0

由於jQuery 1.6,在大多數情況下,'.attr()'可以/應該被替換爲'.prop()'。 http://api.jquery.com/prop/ – Sparky 2012-01-06 19:58:18

+0

這在舊版IE(6和7)以及可能的8甚至9以兼容模式下不起作用。通常避免使用'setAttribute()',特別是對於事件處理程序。 – 2012-01-19 12:19:29