Javascript IE9没有';我不接受这个代码
我发现了这段代码,它是解决我问题的完美方案,但我刚刚发现它在ie9中不起作用。有人知道如何重新编写此代码以在IE9中工作吗?下面是它的javascript代码Javascript IE9没有';我不接受这个代码,javascript,function,cross-browser,internet-explorer-9,Javascript,Function,Cross Browser,Internet Explorer 9,我发现了这段代码,它是解决我问题的完美方案,但我刚刚发现它在ie9中不起作用。有人知道如何重新编写此代码以在IE9中工作吗?下面是它的javascript代码 function showonlyonev2(thechosenone) { var newboxes = document.getElementsByTagName("div"); for (var x = 0; x < newboxes.length; x++) { name = newboxes
function showonlyonev2(thechosenone) {
var newboxes = document.getElementsByTagName("div");
for (var x = 0; x < newboxes.length; x++) {
name = newboxes[x].getAttribute("class");
if (name == 'newboxes-2') {
if (newboxes[x].id == thechosenone) {
if (newboxes[x].style.display == 'block') {
newboxes[x].style.display = 'none';
}
else {
newboxes[x].style.display = 'block';
}
} else {
newboxes[x].style.display = 'none';
}
}
}
}
功能仅在EV2上显示(软管){
var newbox=document.getElementsByTagName(“div”);
对于(变量x=0;x
我在JSFIDLE中运行了它,得到了以下错误:
第4行的问题字符9:只读
name=newbox[x].getAttribute(“类”)
这里还有HTML部分(删除头部和身体标记的简短版本):
第1分部
第2分部
第3分部
这是我的JSFIDLE视图
您的编辑使问题更加清晰: 我在JSFIDLE中运行了它,在第4行得到了这个错误:问题字符9:只读
name=newbox[x].getAttribute(“类”)代码>
您没有在任何地方声明name
,因此您在某些包含范围(可能是全局范围,例如window.name
)中使用name
。显然IE9认为这是一个只读属性,尽管我找不到任何文档支持它
在任何情况下,你都不想乱搞别人的变量。放入var名称代码>位于函数顶部,因此您可以使用自己的变量。:-)
当我们不得不猜测到底出了什么问题时,最初的答案是:
IE有一个长期存在的bug,它认为class
属性被称为className
,甚至在getAttribute
中也是如此。IE9在错误命名的“兼容性”模式下继续此错误。在标准模式下,它会正确地进行
最好的做法是完全避免这个问题,因为类
属性不需要使用getAttribute
;改为使用反射属性:
name = newboxes[x].className;
首先,不要只是发布一段代码。告诉我们你期望它做什么以及你实际看到了什么。第二,这是javascript,不是java。我正在为您修复标签。“反射属性”是这类事情的正确术语吗?我还以为是expando型的。。UH事情。@asawyer:这是通常的说法。事实上,仅仅“财产”就足够了,而且可能更好<代码>类名
,htmlFor
,id
,类型
,值
等不可扩展。expando是您添加到元素中的任意属性,而元素始终具有规范定义的这些属性(它们的值可能是空字符串,但它们具有空字符串)。(其中一些属性具有相当复杂的定义--value
,例如,其他属性基本上只是访问属性的另一种方式。)
name = newboxes[x].className;