You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在jQuery中能否选择同一ASPX页面不同ASCX控件内同ID的多个元素?

解决方法

因为ASP.NET服务器控件在渲染时会自动生成唯一的客户端ID,不会直接使用你定义的TextView(除非设置了特定的ClientID模式),所以直接用$("#TextView")只能匹配到第一个元素,甚至可能实际渲染后根本没有ID为TextView的元素。

你可以用以下几种方式来选择这两个文本框:

  • 使用CSS类选择器(推荐)
    在ASCX的TextBox控件中添加CssClass属性:

    <asp:TextBox ID="TextView" CssClass="text-view-input" runat="server" />
    

    然后在JS中通过类选择器获取所有实例:

    $(".text-view-input").each(function() { SomeOtherFunction(this.value); });
    

    这种方式不受ASP.NET客户端ID变化的影响,是最稳定的方案。

  • 使用属性包含选择器
    利用ASP.NET生成的客户端ID会包含原ID的特性,用*=匹配ID中包含TextView的元素:

    $("[id*='TextView']").each(function() { SomeOtherFunction(this.value); });
    

    注意如果页面中有其他ID包含TextView的元素,也会被选中,需要确保唯一性。

  • 设置ClientIDMode为Static(不推荐)
    可以给TextBox设置ClientIDMode="Static",让客户端ID保持为TextView:

    <asp:TextBox ID="TextView" ClientIDMode="Static" runat="server" />
    

    此时你的原代码$("#TextView").each(...)就能找到两个元素,但这种做法会导致HTML中出现重复ID,违反HTML规范,可能引发其他兼容性问题,不建议使用。

内容的提问来源于stack exchange,提问作者Don Del Grande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:45:44