【问题标题】:Javascript does not work in Internet Explorer 8Javascript 在 Internet Explorer 8 中不起作用
【发布时间】:2013-01-30 18:35:52
【问题描述】:

我有一个 javascript 要求用户确认他们想离开我的网站。看起来是这样的:

  function confirmLeave()
  {
    if(confirm("Do you want to leave my webpage?")) {
      return true;
    } else {
      if(window.event) {
        window.event.returnValue = false;
      } else {
        e.preventDefault();
      }
      return false;
    }
  }

function initiate ()
{
    var links = document.getElementsByClassName("external-link");
    for (var i = 0; i < links.length; i++) {
        links[i].onclick = confirmLeave;
    }   

}
window.onload = initiate;

它在 Firefox 和 Chrome 中运行良好,但在 IE8 中则不行。我知道document.getElementsByClassName 不起作用,我尝试使用document.getElementsbyTakeName 重新制作我的代码,但没有让它起作用。这是我想出的:

function confirmLeave()
      {
        if(confirm("Do you want to leave my webpage?")) {
          return true;
        } else {
          if(window.event) {
            window.event.returnValue = false;
          } else {
            e.preventDefault();
          }
          return false;
        }
      }

funciton initiate ()
{
    if(document.getElementsByClassName)
    {   
    var links = document.getElementsByClassName("external-link");
    for (var i = 0; i < links.length; i++) {
        links[i].onclick = confirmLeave;
    } 
    } else {
     var links = document.getElementsByTagName("external-link");
    for (var i = 0; i < links.length; i++) {
        links[i].onclick = confirmLeave;
    }
    }
}
window.onload = initiate;

external-link 是我用于离开网页的链接的类。

【问题讨论】:

  • funciton = initiate; 这行似乎不正确。可能是:var initiate = function() ...
  • 啊,只是一个错字。现在修复它

标签: javascript internet-explorer-8


【解决方案1】:

尝试使用document.querySelectorAll(".external-link")

source

【讨论】:

  • 只是替换 document.getElementsByClass?
  • 是的。虽然它需要一个 CSS 选择器作为输入,所以getElementsByClassName("external-link") 变成了querySelectorAll(".external-link")
  • @Benji,是的。根据 MSDN W3C Selectors API provides two methods for using selectors to select objects: querySelector, which selects the first object that matches your criteria; and querySelectorAll, which returns all objects that match your criteria. You can select among the document objects or those that descend from a common container object.
【解决方案2】:

如果这对您来说是一个可行的选择,请考虑包含 jQuery 库。 那么你可以这样写:

$('.external-link').click(function() { confirmLeave() });

【讨论】:

  • 我不想使用任何库
【解决方案3】:

这里的问题是document.getElementsByTagName() 将一个元素作为输入,例如divspanaexternal-link 不是一个元素,所以它永远不会返回任何东西。

对于 IE8,您可以使用document.querySelectorAll(".external-link")。它需要一个 CSS 选择器作为输入。

如果您还需要支持旧版浏览器,您可以尝试使用 https://gist.github.com/2397759,它是一种 polyfill,可让 getElementsByClassName 在原生不支持它的浏览器上工作。

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多