我正在尝试在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>
答案 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;
}