使用Google Analytics跟踪文本框条目

时间:2012-12-10 20:22:25

标签: c# asp.net google-analytics sitecore

我正在尝试在Google Analytics中捕获输入到文本框中的数据。我到目前为止的代码如下,我试图通过Javascript捕获数据,但我似乎无法让它工作。我使用的CMS平台是sitecore。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SalesRepSearch.ascx.cs"     Inherits="USEndoscopy.Website.layouts.USEndoscopy.Sublayouts.SalesRepSearch" %>
<%@ Import Namespace="USEndoscopy.Library.Search" %>

<script type="text/javascript">
    var textbox = document.getElementById('txtZipCode'),
    submitButton = document.getElementById('btnSalesRepSearch');

submitButton.onClick = function () {
    _trackEvent('data-store', textbox.name, textbox.value, 0);
    // 'data-store' can be replaced with whatever category of data you want, for sortability's sake
    // the 0 can be replaced with any other numerical data you want - but it must be numerical
}
</script>
<p></p>
<p>
    <asp:Panel DefaultButton="btnSalesRepSearch" runat="server">
    <asp:TextBox ID="txtZipCode" runat="server" Width="300px"></asp:TextBox>
    <asp:Button ID="btnSalesRepSearch" runat="server" CssClass="buttonregular" Text="Search" OnClick="btnSalesRepSearch_Click" />
    <asp:RequiredFieldValidator ID="reqTxtZipCode" runat="server" ValidationGroup="ZipCode" ControlToValidate="txtZipCode" Display="Dynamic" ErrorMessage="Please enter a valid US Zip code" CssClass="error"></asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="regExTxtZipCode" runat="server"     ValidationExpression="^\d    {5}(-\d{4})?$" ValidationGroup="ZipCode" ControlToValidate="txtZipCode" Display="Dynamic"     ErrorMessage="Please enter a valid US Zip code" CssClass="error"></asp:RegularExpressionValidator>
    </asp:Panel>
</p>

<p>
    <asp:Repeater ID="salesRepContainer" runat="server">
        <ItemTemplate>
            <%# ((SalesRep)Container.DataItem).RepName %><br />
            <%# ((SalesRep)Container.DataItem).Phone %><br />
            <a href="mailto:<%# ((SalesRep)Container.DataItem).Email %>"><%# ((SalesRep)    Container.DataItem).Email %></a><br />
        </ItemTemplate>
    </asp:Repeater>
</p>
<p>
    <sc:Text Field="InternationalMessage" runat="server" />
</p>

2 个答案:

答案 0 :(得分:1)

您是否检查了呈现的HTML的源代码?由于嵌套在面板中,ASP.Net WebControl ID最终是否完全不同?

也许您应该为这些添加CSS类并使用document.getElementsByClassName

如果您使用的是jQuery,那么您可以使用attributeEndsWith选择器

$('input[id$="txtZipCode"]');
$('input[id$="btnSalesRepSearch"]')

答案 1 :(得分:1)

这是因为ASP.NET在呈现文本框时更改了文本框的ID值。

如果您正在运行.net V4或更高版本,请将ClientIDMode="Static"添加到文本框中 按钮。这告诉.net不要更改控件的ID。

    <asp:TextBox ID="txtZipCode" runat="server" ClientIDMode="Static" Width="300px"></asp:TextBox>
    <asp:Button ID="btnSalesRepSearch" runat="server" ClientIDMode="Static" CssClass="buttonregular" Text="Search" OnClick="btnSalesRepSearch_Click" />

如果运行少于.net 4将您的Javascript更改为:(。ClientID获取.net在呈现时为其提供控件的ID)

    var textbox = document.getElementById('<%= txtZipCode.ClientID %>'),
    submitButton = document.getElementById('<%= btnSalesRepSearch.ClientID %>');

<强>更新

您可能遇到一个问题,即您的javascript函数在按钮实际可用于DOM之前尝试将<{1}}函数分配给按钮

请尝试以下方法:

Javascript功能

click

然后在按钮上添加属性

function btnSearchClick(){
     var textbox = document.getElementById('txtZipCode');


     // Change your google code to this:

     _gaq.push(['_trackEvent', textbox.name, textbox.value,  0]);

     return true;
 }