【问题标题】:Disabling textbox in gridview using Javascript使用Javascript在gridview中禁用文本框
【发布时间】:2016-06-07 09:11:59
【问题描述】:

我的部分网格视图如下所示:

                    <asp:TemplateField HeaderText="Mortality Rate" SortExpression="Other2">
                <EditItemTemplate >
                    <asp:TextBox ID="txtAppLimit" Text='<%#Bind("Other2")%>' runat="server" width="60px" maxlength="14">
                    </asp:TextBox>
                     <asp:RangeValidator ID="RVAppLimit" Type="Currency" runat="server" ControlToValidate="txtAppLimit"  
                            Display="Dynamic" ErrorMessage="" Font-Size="8pt" 
                            CssClass="msgerror" MinimumValue="0" MaximumValue="200" OnPreRender="GridView1_PreRender" ValidationGroup="group1"> 
                    </asp:RangeValidator>  
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblAppLimit" Runat="server" Text='<%# Bind("Other2") %>' >
                    </asp:Label>
                </ItemTemplate>
                    <ItemStyle HorizontalAlign="Right" Width="10%" />
                </asp:TemplateField>

当我点击一个asp LinkBut​​ton时,我正在尝试以这种方式获取asp TextBox ID和asp Label ID:

        var $arrL = $('#<%=GridView1.ClientID %>').find('span[id$="lblAppLimit"]');
        var $lbl = $arrL[0];
        ($lbl).disabled = true;
        alert (($lbl).disabled);

        var $arrT = $('#<%=GridView1.ClientID %>').find('input:text[id$="txtAppLimit"]').val();
        var $txt = $arrT[0];
        alert (($txt).innerHTML);

禁用 lblAppLimit 没有问题,但是我无法获取文本框 ID 来禁用它。我上面的代码有什么问题?

再补充一点,当我在浏览器上点击查看源代码时,我可以看到 lblAppLimit,但看不到 txtAppLimit。

【问题讨论】:

  • 可能你没有处于编辑模式,这就是为什么...
  • @Legends 你是什么意思?
  • txtAppLimitEditItemTemplate 中,所以它只有在网格处于编辑模式时才有效
  • 代码太少,无法帮助您,请向我们展示完整的网格标记和您的服务器端网格处理代码。
  • @Ansari 即使我处于编辑模式,它也无法正常工作。

标签: javascript c# jquery asp.net gridview


【解决方案1】:

txtAppLimit 位于 EditItemTemplate 中,因此它仅在网格处于编辑模式时才有效

所以在编辑模式下试试这个脚本

var $arrT = $('#<%=GridView1.ClientID %>').find('input:text[id*="txtAppLimit"]').val();
        var $txt = $arrT[0];
        alert (($txt).innerHTML);

我不知道你为什么使用$arrT[0],但这肯定会在编辑模式下工作

$('#<%=GridView1.ClientID %>').find('input:text[id*="txtAppLimit"]').val()

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    让你 txtAppLimit 像这样 STATIC :

    1 &lt;asp:TextBox ID="txtAppLimit" Text='&lt;%#Bind("Other2")%&gt;' width="60px" maxlength="14" ClientIDMode="Static" runat="server"&gt;&lt;/asp:TextBox&gt;

    并将 jquery 更改为:

    1 $(this).find('input:text[id="txtAppLimit"]').val();

    更新: 您还可以尝试向每个文本框添加类,例如 txtclass1,txtclass2

    alert($(this).parent("td").parent("tr").find(".txtclass1").val()); 
    alert($(this).parent("td").parent("tr").find(".txtclass2").val());
    

    【讨论】:

    • 我使用的是 .NET Framework 2.0,我无法让 ClientIDMode 在我的应用程序中工作。您还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2012-10-28
    相关资源
    最近更新 更多