我正在尝试在页面上使用几个asp.net复选框,相应地禁用它们。
<asp:CheckBox ID='chkMenuItem' runat='server' CssClass='HiddenText' Text='Test' onclick='<%#String.Format("checkChild({0});", Eval("id")) %>' />
在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中不起作用。
谢谢,
答案 0 :(得分:13)
我在使用jQuery在Internet Explorer中启用<asp:CheckBox />
时遇到了类似的问题。以下代码在FireFox中运行得非常好。
$('myCheckBox').removeAttr('disabled');
但是,它无法在IE中正常工作。
<asp:CheckBox />
呈现为<span />
,其中包含<input />
和<label />
标记。禁用该复选框时,span和input标签都将使用disabled属性进行修饰。为了获得预期的行为,我习惯了以下代码:
$('myCheckBox').removeAttr('disabled');
$('myCheckBox').closest('span').removeAttr('disabled');
答案 1 :(得分:0)
这应该是def。工作
$('#' + childID)[0].disabled = false;
答案 2 :(得分:0)
你想要一个像这样的if语句
if ($("#" + childID + ":disabled").length) // is childID disabled?
$("#" + childID).removeAttr("disabled"); // enable it
else
$("#" + childID).attr('disabled', 'disabled'); // disable it
答案 3 :(得分:0)
这里有许多冗余选择器会使这个功能效率非常低。首先,对于选择器运行查询相对于其余代码来说非常慢,因此请缓存选择器的结果并对其进行处理。此外,您应该使用i
运算符声明var
,以使其成为您的函数的本地。并且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;
}
}
}