Asp.net 使用Javascript触发文本框的只读标志

Asp.net 使用Javascript触发文本框的只读标志,asp.net,javascript,html,Asp.net,Javascript,Html,我有一个有几个单选按钮的框架,用户应该选择他的职业所属的类别,然后无条件地指定他的职业。 如果用户选择Retired,则需要在“指定职业”文本框中预先填充Retired,并禁用它以防止其更改。“指定职业”文本框也不应再作为制表位。如果用户选择的单选按钮不是已退出,则应启用“指定职业”文本框,并且“指定职业”文本框应再次处于正常选项卡顺序 最初,我在指定职业文本框上设置并清除disabled属性,然后我发现,在提交表单时,禁用的字段被排除在提交之外,并且指定职业文本框上所需的验证器被引发,因为文

我有一个有几个单选按钮的框架,用户应该选择他的职业所属的类别,然后无条件地指定他的职业。

如果用户选择Retired,则需要在“指定职业”文本框中预先填充Retired,并禁用它以防止其更改。“指定职业”文本框也不应再作为制表位。如果用户选择的单选按钮不是已退出,则应启用“指定职业”文本框,并且“指定职业”文本框应再次处于正常选项卡顺序

最初,我在指定职业文本框上设置并清除disabled属性,然后我发现,在提交表单时,禁用的字段被排除在提交之外,并且指定职业文本框上所需的验证器被引发,因为文本框被清空

解决这个问题的最好办法是什么?我下面的方法是通过设置/重置文本框上的readonly属性并更改背景颜色使其显示为禁用来模拟禁用的文本框。我想我应该改变前景色而不是背景色。然而,我的代码,使文本框只读和重置它似乎没有工作

    function OccupationOnClick(sender) {

        debugger;
        var optOccupationRetired = document.getElementById("<%= optOccupationRetired.ClientId %>");
        var txtSpecifyOccupation = document.getElementById("<%= txtSpecifyOccupation.ClientId %>");
        var optOccupationOther = document.getElementById("<%= optOccupationOther.ClientId %>");

    if (sender == optOccupationRetired) {

        txtSpecifyOccupation.value = "Retired"
        txtSpecifyOccupation.readonly = "readonly";
        txtSpecifyOccupation.style.backgroundColor = "#E0E0E0";
        txtSpecifyOccupation.tabIndex = -1;
    }
    else {
        if (txtSpecifyOccupation.value == "Retired")
            txtSpecifyOccupation.value = "";
        txtSpecifyOccupation.style.backgroundColor = "#FFFFFF";
        txtSpecifyOccupation.readonly = "";
        txtSpecifyOccupation.tabIndex = 0;
    }
}

有没有人能给我提供一个处理这个场景的最佳方法的建议,并为上面的代码提供一个tweek来修复readonly属性的设置/重置?

我会使用jQuery,它非常容易实现

要将文本框设置为只读

$("#myTxtID").attr('readonly', 'readonly');
将文本框设置为非只读

$("#myTxtID").removeAttr('readonly');

我最近也不得不做同样的事情。我是这样解决的

返回使用disabled属性,而不是readonly

用CustomValidator替换RequiredFieldValidator。在客户端和服务器验证功能中,根据失效单选按钮的条件确定是否需要检查文本输入。然后检查文本框中的输入(如果需要)。在js端,您可以选中文本框本身的disabled属性来节省步骤

在服务器端,您应该仔细检查单选按钮选择,如果选择了Retired,您应该确保Occupation值实际上是Retired。这就解决了无法从禁用的字段中获取值的问题,而且无论如何,您都应该这样做—永远不要相信用户以及所有这些


你几乎不想使用手工编写的css选择器javascript,而是使用诸如jQuery之类的框架来选择元素。我有点困惑——为什么你要阻止用户输入特定的职业?我理解当他们点击上面的一个选项时会默认,但是为什么他们不能输入自己的标题呢为了记录在案,我还没有找到一个网站列出我在过去10年中的确切职业头衔。。。大多数调查网站都认为我是从事信息技术的,因为这是最接近的匹配。只有当他们选择退休时,这才会阻止他们。所有其他选项都允许指定职业。如果您确实只希望他们在选择其他选项时输入自定义标题,则隐藏文本框,并仅在选择其他选项时显示。回复:您几乎不想使用手写css选择器javascript,请使用诸如jQuery之类的框架来选择元素。为什么不呢?我不知道jQuery,它是新的。在jQuery之前人们做了什么?