Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 对于使用jquery的IE,复选框不能正常工作_Asp.net_Jquery_Checkbox - Fatal编程技术网

Asp.net 对于使用jquery的IE,复选框不能正常工作

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.net复选框,并相应地禁用它们

<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获取元素,也不需要通过设置元素的禁用状态来获取和设置元素的禁用状态,这可以通过布尔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;
        }
    }
}
函数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');