2012-12-29 67 views
0

我想找到一種方法來導致onclick事件的類。因此,例如以一種形式說。我想給這個表單一個類。每次我將某個類添加到某個字段時,我都希望它爲表單字段生成一個onclick命令。使用JavaScript來添加一個OnClick事件

我這樣做的原因是我想爲每個表單域添加分析跟蹤,但我使用的是重力形式,因此我希望能夠在不編輯每個表單的情況下即時創建表單。如果我可以創建一個名爲.name的類並讓該類將此onClick="mixpanel.track('Name_field');"添加到表單輸入中,那麼我可以跟蹤每次用戶單擊表單內部以填充它。這樣我就可以跟蹤表單的每一步並查看用戶何時離開。

因此,清單將是

.name that would add onClick="mixpanel.track('Name_field');" 
.email that would add onClick="mixpanel.track('Email_field');" 
.phone that would add onClick="mixpanel.track('pnone_field');" 

我希望是有道理的。謝謝你提供的所有幫助。我相當新的JavaScript,所以請容易對我。 HTML和CSS我是一個職業,但JavaScript是我的下一座山要爬。

+1

歡迎SO。你知道有些公司是以這種生活爲目的的,而且它們很好(好或壞)。 –

+1

[ClickTales](http://www.clicktale.com/)是我記憶中的人,但也有其他人,一些免費(一段時間)。 –

+0

如果你願意使用jQuery,你可以選擇所有具有class屬性的輸入,並添加點擊處理器: '$('#formid input [class]')。each(function(){$(this)。單擊(mixpanel.track($(this).attr('class').val()+'_ field'))})' – icramc

回答

1

這將是更爲有效的委派,所以你只能有一個事件處理程序:

var f = function (e) { 
    e = e || window.event; 
    var t = e.srcElement || e.target, m; 
    while (t !== this && (!t.className || !(m = t.className.match(/\b(name|email|phone)\b/)))) { 
    t = t.parentNode; 
    } 
    if (m) { 
    switch (m[0]) { 
     case "name": mixpanel.track("Name_field"); break; 
     case "email": mixpanel.track("Email_field"); break; 
     case "phone": mixpanel.track("phone_field"); break; 
    } 
    } 
}; 
if (document.body.attachEvent) { 
    document.body.attachEvent("onclick", f, true); 
} else { 
    document.body.addEventListener("click", f, true); 
} 
+0

您真的認爲每次點擊'body'時運行的classname dispatcher比個別元素偵聽器? – katspaugh

+0

單獨,沒有。但最終的收益取決於它有多少元素,它們被添加/刪除的頻率以及用戶點擊的頻率(通常,平均每頁大約1-2次!) –

+0

第4行代碼:幫幫我 – gmeben

相關問題