Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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
Javascript 禁用IE7中的复选框_Javascript_Internet Explorer - Fatal编程技术网

Javascript 禁用IE7中的复选框

Javascript 禁用IE7中的复选框,javascript,internet-explorer,Javascript,Internet Explorer,我在表单中有两个复选框,如果选中第一个复选框,则应启用第二个复选框,如果未选中第一个复选框,则应禁用第二个复选框。我创建了一个快速函数来处理此问题: function toggleElement(sender, receiver) { var sendEl = document.getElementById(sender); var recEl = document.getElementById(receiver); if (sendEl.checked)

我在表单中有两个复选框,如果选中第一个复选框,则应启用第二个复选框,如果未选中第一个复选框,则应禁用第二个复选框。我创建了一个快速函数来处理此问题:

function toggleElement(sender, receiver)
{
    var sendEl = document.getElementById(sender);
    var recEl = document.getElementById(receiver);
    if (sendEl.checked)
        recEl.disabled = false;
    else
        recEl.disabled = 'disabled';
}
这在FF和IE 8/9中运行良好,但在IE7中没有任何作用,我添加了以下内容以了解发生了什么:

alert(receiver);
alert(recEl);
alert(recEl.disabled);
在可工作的浏览器(FF、IE8+)中,如果禁用,则会发出“名称”、“对象”和“真”警报;如果未禁用,则发出“假”警报。在IE7中,警报会被触发,但会说“name”、“object”和“true”,即使复选框从未被禁用(它不会变灰,我可以继续单击它)


你知道为什么它不能在IE7中工作吗?

disabled
是一个布尔属性。使用
false
true
,而不是
false
“禁用”
。它应该会起作用


HTML标记中的整个
disabled=“disabled”
是因为XHTML验证器,而不是因为该值允许为字符串“disabled”。实际上,如果将此模式应用于HTML5的
required
属性,即使您说
required=“false”
,也会得到必填字段。在HTML5标记中执行此操作的方法是在
true
时指定
required
,而在
false

时根本不指定它。在操作DOM时,
disabled
属性应设置为
true
false
,而不是字符串。如果将
禁用的
替换为
真的
,会发生什么情况

您还可以将逻辑简化为

recEl.disabled = !sendEl.checked;

这是JavaScript中非常基本的内容;甚至IE也不应该有问题。

一开始的确如此,但另一个论坛建议更改为“禁用”以匹配w3schoolsIt上的示例。在IE7中,sendEl.checked似乎总是错误的,这没有什么意义,因为这让我认为第二个复选框总是禁用的,除非问题出在IE7Maybe中的document.getElementById上,否则我们可能需要更多的上下文,因为即使使用
disabled=“disabled”
之类的东西,它也能工作(至少在IE9-as-7上)。编辑:当我在IETester-as-7上检查它时,看起来第二个复选框的视觉外观更新有延迟。你能确认IE7真的没有禁用它吗?可能只是没有改变外观吗?我的机器上没有IE,但是如果设置为
false
不起作用,你可以尝试使用
element.removeAttribute(“disabled”)
delete element.disabled
。我最初将其设置为true,但在另一个论坛的请求下将其更改为“disabled”,引用attributeThat的cargo cult编程示例。我补充了一个解释,解释为什么有人会建议这样做。现在这样做是错误的。请看看为什么你不应该把他们说的当作福音“无效”,就像任何字符串都是真实的值一样…-不正确,但仍然可以工作,直到不确定问题的起因,但从这开始工作并更改为JQuery似乎已经解决了问题,最后的代码是:function-toggleElement(sender,receiver){$(“#”+receiver).attr('disabled',!($(“#”+sender.attr('checked'));}