javascript - getElementByID 在 IE 中不起作用

标签 javascript html internet-explorer

我目前在调用 getElementByID 的脚本时遇到问题在 Internet Explorer 11(可能还有旧版本)中。它在 Edge、Chrome、FF 等中工作正常。但在 IE 中,div 不会出现,并且在控制台中出现错误:

SCRIPT5007: Unable to set property 'visibility' of undefined or null reference

本质上,有四个隐藏的 div,脚本依次显示每个隐藏的 div,它们之间有几秒钟的间隙。

该函数由body标签调用:

<body onload="displayBlocks()">

div 的 Html 是:

一些文字

  <div id="text_box_2" class="tb">
    Some Text
  </div>

  <div id="text_box_3" class="tb">
    Some Text
  </div>

  <div id="text_box_4" class="tb">
    Some Text
  </div>

脚本是:

i = 0;

function displayBlocks() {
  if (i < 4) {
    alert
    setTimeout(function() {
      showBlock(i);
    }, 3000);
  }
}

function showBlock(blockN) {
  if (blockN == 0) {
    item = document.getElementById("text_box_1");
    item.style.visibility = "visible";

  }

  if (blockN == 1) {
    item = document.getElementById("text_box_2");
    item.style.visibility = "visible";
  }

  if (blockN == 2) {
    item = document.getElementById("text_box_3");
    item.style.visibility = "visible";
  }

  if (blockN == 3) {
    item = document.getElementById("text_box_4");
    item.style.visibility = "visible";
  }

  i++;
  displayBlocks();

}
}

任何关于为什么会发生这种情况的想法将不胜感激。

最佳答案

您需要更改项目变量的名称 - 它是 IE 的保留变量

var i = 0;

function displayBlocks() {
  if (i < 4) {
    setTimeout(function() {
      showBlock(i);
    }, 3000);
  }
}

function showBlock(blockN) {
  if (blockN == 0) {
    console.log(item);
    var item1 = document.getElementById("text_box_1");
    item1.style.visibility = "visible";
  }

  if (blockN == 1) {
    var item1 = document.getElementById("text_box_2");
    item1.style.visibility = "visible";
  }

  if (blockN == 2) {
    var item1 = document.getElementById("text_box_3");
    item1.style.visibility = "visible";
  }

  if (blockN == 3) {
    var item1 = document.getElementById("text_box_4");
    item1.style.visibility = "visible";
  }

  i++;
  displayBlocks();
}

displayBlocks();
.tb {
  visibility: hidden;
}
<div id="text_box_1" class="tb">
  Some Text 1
</div>

<div id="text_box_2" class="tb">
  Some Text 2
</div>

<div id="text_box_3" class="tb">
  Some Text 3
</div>

<div id="text_box_4" class="tb">
  Some Text 4
</div>

如果运行上面的代码片段,您会发现它在除 IE 之外的所有浏览器中崩溃,原因是 console.log(item)

正如@JLRishe指出的,如果你将它声明为var,你可以将你的项目设置为本地的if - 你似乎没有声明任何变量(你应该开始,否则它们是所有全局性的,你会遇到更多此类问题)

关于javascript - getElementByID 在 IE 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47392049/

相关文章:

javascript - 无法使用 .keyup, .keydown ,.keypress 实现解决方案

html 表格 - 填充动态空间

javascript - JQuery 分页插件不适用于 html 表中动态添加的行

silverlight - Silverlight 的 HtmlPage.Window.Navigate 和 HyperlinkBut​​ton 的区别?

windows - 有没有办法在没有 IE 11 的情况下安装 VS 2013?

internet-explorer - 为什么 Internet Explorer (9) 在 UserAgent 中报告 "Mozilla"?

javascript - 一段时间延迟后依次翻转多个图像

javascript - jquery-ui-draggable 对齐指南

javascript - JS : Received Parameter from a function is differ than actual parameter

javascript - id vs 类选择基准