如何选择传递保存在 jQuery JS 变量中的 id 的 ASP.NET 服务器控件?

发布于 2024-10-31 06:06:43 字数 231 浏览 1 评论 0原文

应该很简单,但我的心很累。如何让此 jQuery 选择 ID 类似于 lblName 的 ASP.NET 服务器控件。 ID 不同,通过 id 变量传入。

var id = 'Name';    //an example
var $element = $("#<%= 'lbl'+ id.ClientID %>");

Should be simple but my mind is tired. How to get this jQuery to select an ASP.NET server control with an id like lblName. The IDs are different and coming in through the id variable.

var id = 'Name';    //an example
var $element = $("#<%= 'lbl'+ id.ClientID %>");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

她说她爱他 2024-11-07 06:06:43

我建议使用 jquery 中的部分选择器,而不是使用“<%=”标签。因此,您的选择器将如下所示。

var $elements = $("[id*=lbl]");  //This selector if you want to get all controls that have "lbl" in the id
var $element2 = $("[id$=lblName]"); // This selector if you know the id specified and want that specific control.  It will return all matches that end with "lblName"

$= is "EndsWith"
^= is "StartsWith"
*= is "Contains"

这将使您能够选择控件,并能够将这些选择器移动到外部 js 文件,而不必与控件位于同一页面上。

编辑:将选择器切换为“包含”。其背后的原因是,如果您没有使用 .net 4.0 或者您没有关闭自动生成的 id,那么您渲染的 id 将如下所示:“cto001$Somethingsomething${specifiedId here}”(不带 {})。因此,您不能使用“Startswith”选择器,因为它试图匹配 id 的动态部分。

你将无法完成最后的任务,因为你的 id 的最后部分也是动态的。因此,我们剩下“包含”选择器,它将匹配任何包含“lbl”的控件。您可以考虑使 Id 的第一部分(非动态部分)不那么通用,以避免返回不相关的控件。

EDIT2:如果您使用的是.net 4.0,您可以关闭自动生成的 ID,然后您可以使用更好的“StartsWith”(^=)选择器,因为渲染的输出 id 将与您指定的相同。您可以通过将 ClientIDMode 设置为“可预测”来做到这一点

Instead of using the "<%=" tags I would suggest using the partial selectors in jquery. So your selector would look like this

var $elements = $("[id*=lbl]");  //This selector if you want to get all controls that have "lbl" in the id
var $element2 = $("[id$=lblName]"); // This selector if you know the id specified and want that specific control.  It will return all matches that end with "lblName"

$= is "EndsWith"
^= is "StartsWith"
*= is "Contains"

This will enable you to select your controls and be able to move those selectors to an external js file instead of having to be on the same page as the control.

EDIT: Switched selector to "Contains". The reason behind this is if you are not using .net 4.0 or you have not switched off the auto generated ids your rendered ids will be something like this: "cto001$Somethingsomething${specifiedId here}" (without the {}). So you can't use the "Startswith" selector as that is trying to match on a dynamic part of the id.

You won't be able to do the ends with as the last part of your id is also dynamic. So we are left with the "Contains" selector which will match any control that contains "lbl". You may consider making the first part of the Id (non-dynamic part) less general to avoid returning unrelated controls.

EDIT2: If you are using .net 4.0 you can turn off the autogenerated Id thing and then you can use the nicer "StartsWith" (^=) selector as the rendered output id would be the same as you specified. You can do this by setting the ClientIDMode to "Predictable"

流年已逝 2024-11-07 06:06:43

如果这是来自数据绑定操作,您可能必须使用 # 代码块:

var id = 'Name'; //an example

var $element = $("#<%# 'lbl'+ id.ClientID %>");

If this is from a databound operation you might have to use the # code block:

var id = 'Name'; //an example

var $element = $("#<%# 'lbl'+ id.ClientID %>");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文