无法获取未定义或空引用的属性'样式',但在另一台服务器中工作

问题描述:

我有一个经典的asp项目。在我的一个页面中,我必须调用一个javascript函数。这个调用没有任何问题,并且可以在我的测试服务器上正常工作(不是本地主机,只是一个服务器来测试他的项目)。但是当我将它部署到实际的服务器时,该功能不起作用。我在onload事件中调用这个函数。无法获取未定义或空引用的属性'样式',但在另一台服务器中工作

该函数具有这种类型的线(我不能写全的代码,因为我工作的公司,不允许它)

document.getElementById("R6C2_1").style.display = 'block' 
document.getElementById("R6C2_2").style.display = 'none' 

....

当我尝试在IE10上调试它,我得到“无法获取属性'风格'的未定义或空引用”错误。之后,javascript函数中的元素不会被加载。他们没有在页面上看到。

我的主要问题是,正如我之前提到的服务器之间的差异。我不明白为什么它可以在一台服务器上运行,但不能在另一台服务器上运行。

+0

不幸的是,这是不够的info.How你打电话吗?你定义了事件监听器,还是使用window.onload? –

+0

我在html body标签中的onload事件监听器上调用它。但我认为它与事件监听器等无关。因为同一页面在另一台服务器上工作,或者具有类似javascript功能的类似页面在我使用的两台服务器上都能正常工作。只是这个网页有问题,我无法弄清楚。 –

+0

切换服务器可能会影响计时,这意味着在开发中某些事情会非常快速地运行,所以您不会看到问题,但是在服务器加载和通信不同的实况下,您可以找到代码尝试访问尚未到达的元素,然后由于页面上的JavaScript停止并且后续元素可能永远不会到达。在您操作代码之前修改您的代码以检查预期的元素“R6C2_1”是否存在,如果没有则显示错误,例如, 'console.log(“元素R6C2_1在预期时没有找到!”)''。这将确认一个时间问题。 –

虽然它无法确定单从这一信息的问题,你应该看看:

  1. 无论元素,你正在寻找实际存在的代码时调用(使用浏览器调试/断点在代码被调用的那一刻查看页面)。
  2. 如果它们存在,检查它们是否有你期望的ID(例如R6C2_1) - 如果没有,为什么?谁创建这些ID?可能是服务器配置问题。
  3. 使用来自每个服务器的应用程序进行调试,然后查看页面/ DOM,查看是否存在差异或检查代码是否在不同时间调用。

这些可能会导致您找出问题。祝你好运!

万一元素只是需要时间来创建,你可以等待,直到它们的存在:

function ExecuteWhenExists() { 
    var R6C2_1 = document.getElementById("R6C2_1"); 
    var R6C2_2 = document.getElementById("R6C2_2"); 
    if (R6C2_1 && R6C2_2) { 
     R6C2_1.style.display = 'block'; 
     R6C2_2.style.display = 'none'; 
    } else { 
     window.setTimeout(ExecuteWhenExists, 100); 
    } 
} 
ExecuteWhenExists(); 

时不存在的元素这不会崩溃,而只会继续努力,以执行一种非阻塞的方式(每0.1秒轮询一次)直到它们存在。