我有一个像这样的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,然后启动它。不知道我在做错了什么:(
答案 0 :(得分:6)
相反,我会在其上添加一个类并执行类似
的操作<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>