【问题标题】:Disable radio button list item with Javascript使用 Javascript 禁用单选按钮列表项
【发布时间】:2012-02-23 19:20:22
【问题描述】:

我正在尝试使用 Javascript 从 asp RadioButtonList 禁用单选按钮。这是我所拥有的:

<asp:RadioButton ID="rbPlanner" runat="server" onclick="deselectRadioListItem('P');" />

调用这个客户端javascript onClick...

    function deselectRadioListItem(radioValue) {
        var clientID = ('<%= rblSummaryOptions.ClientID %>');
        for (i = 0; i < '<%= rblSummaryOptions.Items.Count %>'; i++) {
            if (document.getElementById(clientID + "_" + i.toString()).value == radioValue) {
                (clientID + "_" + i.toString()).disabled === true;
            }
            else
            {
                (clientID + "_" + i.toString()).disabled === false;
            }
        }
    }

一切似乎都正常工作(触发、迭代、if 语句工作)但是,单选按钮控件并没有被禁用,即使逻辑被击中。我错过了什么?非常感谢您的帮助,谢谢!

【问题讨论】:

    标签: javascript asp.net javascript-events


    【解决方案1】:

    === 运算符用于比较。您需要使用=

    function deselectRadioListItem(radioValue) {
        var clientID = ('<%= rblSummaryOptions.ClientID %>');
        for (i = 0; i < '<%= rblSummaryOptions.Items.Count %>'; i++) {
            if (document.getElementById(clientID + "_" + i.toString()).value == radioValue) {
                document.getElementById(clientID + "_" + i.toString()).disabled = true;
            }
            else
            {
                document.getElementById(clientID + "_" + i.toString()).disabled = false;
            }
        }
    }
    

    或者稍微清理一下:

    function deselectRadioListItem(radioValue) {
        var clientID = ('<%= rblSummaryOptions.ClientID %>');
        for (i = 0; i < '<%= rblSummaryOptions.Items.Count %>'; i++) {
            var objCurrentRdo = document.getElementById(clientID + "_" + i.toString());
    
            if (objCurrentRdo.value == radioValue)
                objCurrentRdo.disabled = true;
            else
                objCurrentRdo.disabled = false;
        }
    }​
    

    其他信息:查看 MDN 上的 Comparison Operators

    【讨论】:

    • 我进行了更改,但仍未禁用。
    • @Ted,有什么错误吗?如果元素存在并且它们的值等于传入的 radioValue,那么上面的代码应该可以工作。
    【解决方案2】:

    这肯定是错误的。

    (clientID + "_" + i.toString()).disabled === true;
    

    也许你赢了打字

    document.getElementById(clientID + "_" + i.toString()).disabled = true;
    

    甚至更好

    function deselectRadioListItem(radioValue) {
            var clientID = ('<%= rblSummaryOptions.ClientID %>');
            for (i = 0; i < <%= rblSummaryOptions.Items.Count %>; i++) {
                    document.getElementById(clientID + "_" + i).disabled = 
                  document.getElementById(clientID + "_" + i).value == radioValue;
            }
        }
    

    你这里有一些错误......

    【讨论】:

    • 我喜欢!但是,我得到.... Microsoft JScript 运行时错误:预期对象
    • @Ted 未找到 getElementByID 元素确保此名称存在(clientID + "_" + i),或显示呈现的 html 以查看它们是什么。
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多