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

时间:2009-12-04 16:16:23

标签: asp.net jquery checkbox

我正在尝试在页面上使用几个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中不起作用。

谢谢,

4 个答案:

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