Asp.net 对于使用jquery的IE,复选框不能正常工作
我尝试在一个页面上使用几个asp.net复选框,并相应地禁用它们Asp.net 对于使用jquery的IE,复选框不能正常工作,asp.net,jquery,checkbox,Asp.net,Jquery,Checkbox,我尝试在一个页面上使用几个asp.net复选框,并相应地禁用它们 <asp:CheckBox ID='chkMenuItem' runat='server' CssClass='HiddenText' Text='Test' onclick='<%#String.Format("checkChild({0});", Eval("id")) %>' /> 但它也不起作用 注意:它在FF和Chrome上运行完美,但在IE中不起作用 谢谢,这应该可以。工作 $('#
<asp:CheckBox ID='chkMenuItem' runat='server' CssClass='HiddenText' Text='Test' onclick='<%#String.Format("checkChild({0});", Eval("id")) %>' />
但它也不起作用
注意:它在FF和Chrome上运行完美,但在IE中不起作用
谢谢,这应该可以。工作
$('#' + childID)[0].disabled = false;
你想要这样的if语句吗
if ($("#" + childID + ":disabled").length) // is childID disabled?
$("#" + childID).removeAttr("disabled"); // enable it
else
$("#" + childID).attr('disabled', 'disabled'); // disable it
这里有大量冗余选择器,这将使此功能非常低效。首先,与代码的其余部分相比,为选择器运行查询的速度非常慢,因此请缓存选择器的结果并处理它。另外,您应该使用
var
操作符声明i
,使其成为函数的局部。jQuery不需要通过元素的ID获取元素,也不需要通过设置元素的禁用状态来获取和设置元素的禁用状态,这可以通过布尔DOMdisabled
属性实现。尽管如此,我真的不知道你的代码为什么不工作,但是让它可读和简单肯定会有帮助
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;
}
}
}
函数checkChild(id){
变量输入,复选框,部件,输入=$(“输入[id*=hdnParentMenuItemID]”);
对于(变量i=0,len=inputs.length;i
我在使用jQuery在Internet Explorer中启用
时遇到了类似的问题。以下代码在FireFox中运行得非常好
$('myCheckBox').removeAttr('disabled');
然而,它在IE中无法正常工作
呈现为带有
和
标记的
。当复选框被禁用时,跨度和输入标记都将使用disabled属性进行修饰。为了获得预期的行为,我使用了以下代码:
$('myCheckBox').removeAttr('disabled');
$('myCheckBox').closest('span').removeAttr('disabled');
我想你的意思是,
input=inputs[I]
不会使用$(…)。每个(…)都比for循环更干净?@Nick Craig Wood:可能:更少几个字符,更整洁一些,但由于每次迭代都会调用额外的函数,因此速度也会更慢。事实上,我不使用jQuery,所以我不知道在jQuery中每次each
中传递给调用函数的是DOM元素还是某种jQueryfied东西。请查看以清理for循环。您通过执行此检查i<$(“输入[id*=hdnParentMenuItemID]”)使脚本不必要地变慢。将$(“input[id*=hdnParentMenuItemID]”)放入局部变量,并将length属性放入局部变量。这将不起作用。只要禁用的expando属性有值或禁用的属性有值,它将保持禁用状态。例如。您需要明确删除禁用的属性。参见Joel Potter的答案。$(“#”+childID)[0]
是对实际DOM元素的引用,对吗?如果是这样,设置disabled
属性肯定会起作用。不需要对该属性做任何操作。@Tim Down:确实如此@nickyt:javascript以本机方式处理禁用
和选中
等属性。属性及其值不是简单的HTML属性1:1映射。感谢您的解决方案!我真的很讨厌IE的这种行为,直到我弄明白为什么他们会在span标签上放置disabled属性,这是因为如果复选框的文本也变灰,那么复选框就会被禁用。非常感谢。我花了很长时间,我一直在拔头发。非常感谢。
$('myCheckBox').removeAttr('disabled');
$('myCheckBox').removeAttr('disabled');
$('myCheckBox').closest('span').removeAttr('disabled');