在javascript中使文本框只读

时间:2014-02-10 11:45:46

标签: javascript

我有两个单选按钮和两个文本框。当我点击第一个复选框时,两个texbox都不应该是只读的。但是当我选择第二个单选按钮时,它应该只显示两个文本框。我用谷歌搜索并找到了许多解决方案,但不知道为什么没有一个在我的代码中没有工作。 HTML:

    <asp:RadioButton ID="mailNew" Text="New" runat="server" GroupName="mail_select" onclick="showHide(1)" ClientIDMode="Static" /><br />
    <asp:RadioButton ID="mailExisting" Text="Existing" runat="server" GroupName="mail_select" onclick="showHide(2)" ClientIDMode="Static" />

    <asp:TextBox ID="txtPromotion" runat="server" Width="77px" ></asp:TextBox><br />
    <asp:TextBox ID="txtSubject" runat="server" Width="288px"></asp:TextBox><br />

使用Javascript:

    function showHide(val) {
        var txtpid=document.getElementById(<% = txtPromotion %>)
        var txtsub= document.getElementById('<% = txtSubject.ClientID %>');
        if (val == 2) {
            txtpid.readOnly = false;
            txtsub.readOnly = false;
        }
        if (val == 1) {
            txtsub.setAttribute("readOnly.true");
            txtpid.setAttribute("readOnly,true");
        }
    }

1 个答案:

答案 0 :(得分:0)

我看到两个问题:

  1. 您未ClientID使用txtPromotion

  2. 您使用不正确的属性名称调用setAttribute且根本没有值。

  3. 只需在代码中使用反射属性:

    function showHide(val) {
        var txtpid=document.getElementById('<% = txtPromotion.ClientID %>')
        var txtsub= document.getElementById('<% = txtSubject.ClientID %>');
        if (val == 2) {
            txtpid.readOnly = false;
            txtsub.readOnly = false;
        }
        else if (val == 1) {
            txtsub.readOnly = true;
            txtpid.readOnly = true;
        }
    }
    

    请注意,您的代码假定val永远不会是12以外的任何内容,因为它不会更新readOnly,除非它这两个价值观之一。考虑到这一点,这可能更清洁:

    function showHide(val) {
        document.getElementById('<% = txtPromotion.ClientID %>').readOnly = val == 1;
        document.getElementById('<% = txtSubject.ClientID %>').readOnly = val == 1;
    }