jQuery OnClick没有触发我的事件

时间:2011-04-20 20:13:59

标签: javascript jquery asp.net

我有一个像这样的jQuery:

<script type="text/javascript">
   $(document).ready(function () {

       $("#txtAgentName").click(function (event) {

           alert("I am ready!");

       });

   });
</script>

我假设如果点击我的文本框txtAgentName,这应该会触发。但它没有发生。

这是我的文本框标记:

 <asp:TextBox ID="txtAgentName" runat="server" onclick="Event();"></asp:TextBox>

然而,当我在我的Javascript上执行此操作时:

function ShowTime() {
         alert('<%= DateTime.Now.ToString() %>');
       }

并从我的TextBox OnClick事件中调用此ShowTime,然后启动它。不知道我在做错了什么:(

4 个答案:

答案 0 :(得分:6)

  1. 在ASP.NET设置中,ID并不意味着DOM元素将代表相同的ID
  2. 你有一个onclick事件处理程序,请尝试删除它。
  3. 相反,我会在其上添加一个类并执行类似

    的操作
    <asp:TextBox ID="txtAgentName" runat="server" CssClass="my-text-box"></asp:TextBox>
    
    $(function() {
        $('.my-text-box').click(function() {
            alert('Clicked!');
        });
    });
    

    ASP.NET WebForms中控件的ID属性是构建控件树时将使用的属性。如果你看看DOM中的实际ID,它可能会改为MainContent_txtAgentName

    您可能还需要查看设置ClientIDMode http://beyondrelational.com/blogs/hima/archive/2010/07/16/all-about-client-id-mode-in-asp-net-4.aspx

    如果您使用的是ASP.NET 4.0,则可以使用<asp:TextBox ID="txtAgentName" runat="server" ClientIDMode="Static" ></asp:TextBox>这将逐字呈现ID属性中的内容,作为DOM上的实际ID。

答案 1 :(得分:2)

当该Web控件呈现时,会为其指定一个自动生成的ID。这意味着jquery选择器永远不会找到它。除了已经提到的内容之外,您还可以使用

$("#<%= txtAgentName.ClientId %>").click(function (event) {

或者将控件更改为具有以下属性

ClientIDMode="Static"

将告诉它将txtAgentName渲染为id。

答案 2 :(得分:1)

这是因为.Net可能正在重命名您的文本框。在浏览器中查看生成的代码,以便将文本框重命名为。这将是一团糟。如果您使用的是ASP.NET4,则可以将ClientIdMode =“Static”添加到控件中,它将保持按您的意愿命名。否则,最好的办法是给文本框一个类,并将其用作选择器。

您可以做的另一件事是使用&lt;%= txtAgentName.ClientId%&gt;获取客户端ID。但是如果你的jQuery不在那个页面上,那那就行不通了。

答案 3 :(得分:0)

试试这个:

 <asp:TextBox CssClass="myAgent" ID="txtAgentName" runat="server"></asp:TextBox>


<script type="text/javascript">
$(document).ready(function () {

   $(".myAgent").click(function (event) {

       alert("I am ready!");

   });

});
</script>
相关问题