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'));}