1

我试图在谷歌分析中捕获输入到文本框中的数据。到目前为止我的代码如下,我正在尝试通过 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>
4

2 回答 2

1

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

也许你应该给这些添加一个 CSS 类并使用document.getElementsByClassName

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

$('input[id$="txtZipCode"]');
$('input[id$="btnSalesRepSearch"]')
于 2012-12-10T20:56:00.157 回答
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 上实际可用之前click为您的按钮分配一个函数。

所以尝试以下方法:

Javascript函数

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


     // Change your google code to this:

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

     return true;
 }

并在您的按钮上添加属性

 onClientClick="return btnSearchClick()"
于 2012-12-10T20:56:35.207 回答