复选框无法正常使用jquery的IE

我正在尝试在页面上使用几个asp.net复选框,相应地禁用它们。

<asp:CheckBox ID='chkMenuItem' runat='server' CssClass='HiddenText' Text='Test' onclick='' /> 

在javascript上,我使用以下代码

 function checkChild(id) { for (i = 0; i < $("input[id*=hdnParentMenuItemID]").length; i++) { if ($('input[id*=hdnParentMenuItemID]')[i].value.split(':')[0] == id) { var childID = $('input[id*=hdnParentMenuItemID]')[i].value.split(':')[1]; if ($("#" + childID).attr("disabled")) //$("#" + childID).attr('disabled', ''); $("#" + childID).removeAttr("disabled"); else $("#" + childID).attr('disabled', true); } } } 

现在,一旦页面加载,复选框被禁用,removeAttr部分不起作用。 我试图通过调试器,逻辑工作完全正常。 如果在页面加载时未禁用复选框,则代码可以正常工作。 我尝试用’checked’替换已禁用的’属性’以查看其他属性是否正常工作并且它的工作完全正常。 我试过了

  $("#" + childID).attr('disabled', ''); 

但它也没有用。

注意:它在FF和Chrome上运行完美,但在IE中不起作用。

谢谢,

我在使用jQuery在Internet Explorer中启用遇到了类似的问题。 以下代码在FireFox中运行得非常好。

 $('myCheckBox').removeAttr('disabled'); 

但是,它无法在IE中正常工作。

呈现为带有标记的 。 禁用该复选框时,span和input标签都将使用disabled属性进行修饰。 为了获得预期的行为,我习惯了以下代码:

 $('myCheckBox').removeAttr('disabled'); $('myCheckBox').closest('span').removeAttr('disabled'); 

这应该是def。 工作

 $('#' + childID)[0].disabled = false; 

你想要这样的if语句

 if ($("#" + childID + ":disabled").length) // is childID disabled? $("#" + childID).removeAttr("disabled"); // enable it else $("#" + childID).attr('disabled', 'disabled'); // disable it 

这里有大量冗余选择器会使这个function效率非常低。 首先,对于选择器运行查询相对于其余代码来说非常慢,因此请缓存选择器的结果并对其进行处理。 此外,您应该使用var运算符声明i ,使其成为函数的本地。 并且jQuery不需要通过其ID获取元素或者使用非常混乱的东西来获取和设置其禁用状态,这可以通过布尔DOM disabled属性更简单地完成。 所有这一切,我真的不知道为什么你的代码不起作用,但使它可读和简单肯定会有所帮助。

 function checkChild(id) { var input, checkBox, parts, inputs = $("input[id*=hdnParentMenuItemID]"); for (var i = 0, len = inputs.length; i < len; i++) { input = inputs[i]; parts = input.value.split(':'); if (parts[0] == id) { checkBox = document.getElementById( parts[1] ); checkBox.disabled = !checkBox.disabled; } } }