复选框启用/禁用在IE中不起作用

Checkbox enable/disable not working in IE

本文关键字:IE 不起作用 启用 复选框      更新时间:2023-09-26

当另一个复选框"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中无效。

我认为当我启用复选框时,它的跨度仍然是禁用的。

从firebug,我看到了这个:

<span disabled="disabled">
<input type="checkbox" name="cb1Sub" id="cb1Sub">
</span>
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;
        }
    }

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

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;
}