代码之家  ›  专栏  ›  技术社区  ›  Giorgi

从外部javascript文件获取用户控件中的clientid

  •  4
  • Giorgi  · 技术社区  · 14 年前

    我正在ASP.NET中开发一个用户控件(ascx),它使用javascript操作控件。目前javascript代码是内联的并使用 <%= somecontrol.ClientID %> 得到它需要的控制权。

    this this 但问题是用户控件可以在页面上放置多次。这意味着控件数组(在答案中提到)将使用不同的项呈现多次。因此,脚本将无法检索所需的id。如果我把 <%= ClientId %> 以保存项的数组的名义,我将遇到与我试图解决的问题相同的问题。

    有什么想法吗?

    4 回复  |  直到 7 年前
        1
  •  4
  •   Aristos    14 年前

    好的,另一种方法,我尝试使用JavaScript类样式,然后为每个控件初始化它。

    function oNameCls(ControlId1) {
    
        this.ControlId1 = ControlId1;
    
        this.DoYourWork1 = function() {
            // use the control id.
            // this.ControlId1
        }    
        this.DoYourWork2 = function() {
            // use the control id.
            // this.ControlId1
        }    
    
    }
    

    在控制面板上这样做。

    <script language="Javascript" type="text/javascript">
        // init - create
        var <%=this.ClientID%>MyCls = new oNameCls(<%=Control1.ClientID%>);
        // do your work
        <%=this.ClientID%>MyCls.DoYourWork1();
    </script>
    

    希望现在能帮上忙。

        2
  •  2
  •   Rudism    14 年前

    我解决这个问题的方法是使用CSS类或将控件放置在具有已知id的容器中,然后遍历容器的子级以获得实际控件。例如:

    <asp:TextBox ID="Something" runat="server" CssClass="mycontrol" ... />
    

    可通过以下方式访问:

    jQuery('.mycontrol');
    

    或:

    <div id="ControlContainer">
        <asp:TextBox ID="Something" runat="server" ... />
    </div>
    

    jQuery("#ControlContainer input[type='text']");
    

        3
  •  1
  •   James Wiseman    14 年前

    <input type="hidden" id="ClientId" value="<%=ClientId %>">
    

    然后从你的js:

    $("#" + $("#ClientID").val())
    

    <input type="hidden" id="ClientId" value="#<%=ClientId %>">
    
    ...
    
    $($("#ClientID").val())
    
        4
  •  0
  •   Nick Craver    14 年前

    如果你想找一个 具体的 控制何时可以有多个副本,这无法完成。外部javascript如何知道 n 你想要的控制?

    用户控件:

    <div class="myControl">
      <asp:Button id="MyButton" runat="server" Text="Click Me" />
      <div style="display:none;">Show me!</div>
    </div>
    

    如果jQuery是这样写的:

    $(".myControl input").click(function() {
      $(this).next().slideDown();
    });
    

    .closest("div").next().find(".bob").prev() ……无论你需要什么,都能成功。