首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在javascript网络表单中,我希望通过javascript在子复制器中获得控制权。

在javascript网络表单中,我希望通过javascript在子复制器中获得控制权。
EN

Stack Overflow用户
提问于 2017-02-06 12:10:36
回答 2查看 1.5K关注 0票数 0

我有家长中继器,其中包含另一个儿童中继器。为了简单起见,假设子中继器包含文本框和请求验证器。

标记的简单示例:

代码语言:javascript
复制
<asp:Repeater ID="rpt1" runat="server">
 <HeaderTemplate>
 ....
 </HeaderTemplate>
 <ItemTemplate>
 <asp:Label ID="lbl1" runat="server" CssClass=".."></asp:Label>
 <div class="..">
 <asp:Repeater ID="rpt2" runat="server">
     <HeaderTemplate>
     </HeaderTemplate>
     <ItemTemplate>
       <div class="...">
       <asp:TextBox ID="txt21" runat="server" CssClass="..." MaxLength="7" CssClass="ErrorMessage" ErrorMessage="*" />
       <asp:RequiredFieldValidator ID="rfv21" runat="server" CssClass="ErrorMessage" ErrorMessage="*" />
       </div>
     </ItemTemplate>
     <FooterTemplate>
     </FooterTemplate>
 </asp:Repeater>
 </div>
 </ItemTemplate>
 <FooterTemplate>
 </FooterTemplate>
</asp:Repeater>

我创建了这样一个方法来获取第二个中继器的RequiredField id:

代码语言:javascript
复制
function getId(){

var myId = document.getElementById('<%= rfv21.ClientID %>');
}

但这当然不起作用,而且也有一个例外:

代码语言:javascript
复制
The name control-name Does Not Exist in the Current Context

那我该怎么做呢?

我想提到的是,对于我来说,业务需要的是,当onchange、onkeyup、onkeydown事件为txt21触发时,它将得到它对应的rfv21并对其进行封装:

我创建了这个方法,它触发onchange、onkeyup、onkeydown事件更改:

代码语言:javascript
复制
 function txt21_onChange(txtbox) {
        var newValue = this.value;
        var oldValue = this.oldvalue;
        var myRfv2 = document.getElementById('<%= rfv2.ClientID %>');
        if (newValue != oldValue) {
            ValidatorEnable(myRfv2, true); 
        }
        } 

我将txt21更新为:

代码语言:javascript
复制
<asp:TextBox ID="txt21" runat="server" CssClass=".." MaxLength="7" onkeyup="javascript: txt21_onChange(this);this.oldvalue = this.value;" />

但这条线想要工作:

代码语言:javascript
复制
var myRfv2 = document.getElementById('<%= rfv2.ClientID %>');

正如我之前解释过的。

我认为Item.FindControl(.)也许会有帮助,但我们如何在这种情况下使用它呢?

EN

Stack Overflow用户

回答已采纳

发布于 2017-02-06 13:03:49

这里的问题是,将会有许多这样的控制,每个子中继器的每一行一个。所有这些都将有稍微不同的生成ID。因此,您可以使用jQuery相对于触发事件的txt快速找到它们,而不是按id (不可能)查询它们:

代码语言:javascript
复制
function txt21_onChange(txtbox) {
    var rfv2 = 
     $(textbox)           // gives you the jquery object representing the textbox
     .closest("div")      // the parent div
     .find("id*='rfv2'"); // the element you are looking for, id contains rfv2

这回答了这个线程中关于如何获得元素的直接问题。但我不确定它是否能解决您启用/禁用验证的更大问题。您不能通过javascript中的服务器端控件轻松地做到这一点。此外,在您的代码中,在默认情况下不会禁用验证器。虽然我认为所有这些都值得在SO>上单独问一个问题

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42067476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档