【问题标题】:Checkbox enable/disable not working in IE复选框启用/禁用在 IE 中不起作用
【发布时间】:2016-03-29 14:37:27
【问题描述】:

当另一个复选框“cb1”被选中/取消选中时,我正在尝试启用/禁用一个复选框“cb1Sub”。

<table>
 <tr>
  <td>
   <asp:CheckBox ID="cb1" runat="server" onchange="checkedCB1(this);" />
  </td>
  <td>
   <asp:CheckBox ID="cb1Sub" runat="server" Enabled="false" />
  </td>
 </tr>
</table>




function checkedCB1(elm) {
        var elmId = $(elm).find("input").attr('id');
        var elmChk = $(elm).find("input").attr('checked');
        var elmSubId = elmId + "Sub";

        if (elmChk == "checked") {
            document.getElementById(elmSubId).disabled = false;
        } else {
            document.getElementById(elmSubId).disabled = true;
        }
    }

这在 Firefox 中有效,但在 IE 中无效。

我想当我启用复选框时,它的跨度仍然被禁用。

从萤火虫,我看到这个:

<span disabled="disabled">
<input type="checkbox" name="cb1Sub" id="cb1Sub">
</span>

【问题讨论】:

  • 尝试.prop() 而不是.attr()
  • $(elm).find("input") ? elem 本身就是input

标签: javascript asp.net


【解决方案1】:
function checkedCB1(elm) {
        var elmId = $(elm).find("input").attr('id');
        //use property instead of attr
        **var elmChk = $(elm).find("input").prop('checked');**
        var elmSubId = elmId + "Sub";

        if (elmChk == "checked") {
            document.getElementById(elmSubId).disabled = false;
        } else {
            document.getElementById(elmSubId).disabled = true;
        }
    }

【讨论】:

  • 问题不在于 'elmChk'。如果我使用 attr,elmChk 的值将被“检查”。如果我使用 prop,elmChk 将为真/假。
【解决方案2】:

不是真正的答案,更多的是对一些低效代码的回应。

var elmId = $(elm).find("input").attr('id');

效率大大提高:

var elmId = elm.id;

checked 属性是布尔值,它是 true 或 false 所以

 if (elmChk == "checked") {

应该是:

 if (elmChk) {

无论如何,假设您希望在选中 cb1 时启用 cb1Sub,那么:

function checkedCB1(elm) {
    document.getElementById(elm.id + "Sub").disabled = !elm.checked;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多