【问题标题】:Accessing ClientID of a Control in a different TD访问不同 TD 中控件的 ClientID
【发布时间】:2011-08-12 08:59:58
【问题描述】:

我正在尝试从另一个控件中的 javascript(使用 jquery)调用访问一个控件的 ClientID,以便执行一些客户端显示和隐藏效果。这是基本结构:

<td>
  <asp:LinkButton OnClientClick="DoStuff" runat="server">
</td>
<td>
  <asp:TextBox ID="blah" runat="server">
</td>

在脚本中:

function DoStuff() {
  $("#<%= blah.ClientID %>").hide();
}

我遇到的问题是该函数什么都不做。它可以很好地将对象隐藏在同一个 TD 中,但在这里它似乎无法找到控件。

【问题讨论】:

  • 你有没有发现缺少的右双引号? $("#&lt;%= blah.ClientID %&gt;").hide()
  • 不存在。但在实际代码中它很好。小错字。
  • 你能打开你的 javascript 控制台查看错误吗?并删除 updatepnale 一段时间以查看错误。

标签: jquery asp.net clientid


【解决方案1】:

如果您直接引用服务器端的控件,ClientID 应该包括任何 NamingContainer 信息(来自 GridView 或 Repeater 之类的东西)。找出控件的客户端 ID 使用浏览器的开发工具(IE 有开发工具、Firefox 的 Firebug 等),然后调试 JavaScript(使用相同的工具)并在 JavaScript 控制台中执行 $("#theidyoujustfound") 并查看你最终会得到什么。

您的 DoStuff() 方法中似乎也缺少双引号;你会想要$("#&lt;%= blah.ClientID %&gt;").hide();。而且我不确定它是否有必要,但包含 OnClientClient 函数的括号不会有什么坏处:

<asp:LinkButton OnClientClick="DoStuff()" runat="server">

【讨论】:

  • 是括号。在扩展器对我大喊大叫之后,我完全忽略了这一点,直到我移除它们才起作用。我想它对于实际控制是不同的。谢谢你:)
【解决方案2】:

要验证它找不到它,试试这个:alert($("#&lt;%= blah.ClientID %&gt;).length); 如果它返回一个大于零的数字,那么问题不在于找到。控件中的表格行是否类似于&lt;asp:Repeater /&gt; 控件?如果是这样,那么您也需要将脚本嵌入到转发器模板中。

HTH。

【讨论】:

  • 它在一个UpdatePanel中,它在一个ListView里面。该脚本位于 ListView 之外。然而,警报甚至没有弹出......想法?
  • 好的 nvm,Ian 的添加括号的建议解决了这个问题。感谢您对警报的建议! :)
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多