Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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 IE9没有';我不接受这个代码_Javascript_Function_Cross Browser_Internet Explorer 9 - Fatal编程技术网

Javascript IE9没有';我不接受这个代码

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

我发现了这段代码,它是解决我问题的完美方案,但我刚刚发现它在ie9中不起作用。有人知道如何重新编写此代码以在IE9中工作吗?下面是它的javascript代码

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;