2012-06-22 56 views
5

我对JS非常陌生,并且明白我的脚本可能很糟糕,但它在Safari和Chrome中都可以正常工作,而不是在Firefox中。Firefox中的“未定义”javascript错误

其中,我调用两个函数来隐藏和显示自定义Quicktime影片控制器,方法是在其顶部放置一个“遮罩”(我知道切换将是一个更优雅的解决方案,但我不能'没有这样的功能可以按我想要的方式工作)。无论如何,这是JavaScript的样子:

function revealControls(){ 
     document.getElementById("controlsCover"); 
     controlsCover.style.display ="none" 
} 

function hideControls(){ 
     document.getElementById("controlsCover"); 
     controlsCover.style.display ="block" 
} 

我打电话与适用于各种不同的div鼠标事件,如这些功能:

<div id = "controls" onmouseout = "hideControls()"> 

Firefox是告诉我

"Error: controlsCover is not defined", 

我不知道如何将元素定义为null。

任何帮助,将不胜感激。我相信这是非常简单的事情 - 但我几乎没有使用Javascript的经验。然而。

+0

如何赫克会下的Safari或Chrome这项工作..... – Sebas

+2

http://chat.stackoverflow.com/rooms/17/conversation/noob-javascript-resources HTTP://chat.stackoverflow .com/rooms/17/conversation/learn-javascript-videos http://stackoverflow.com/tags/javascript/info所有开始学习和获取资源的好地方。远离W3SCHOOLS !!!!! MDN是你的新朋友。 – rlemon

回答

6

您需要首先创建controlsCover变量来引用它。

当您第一次使用document.getElementById("controlsCover")时,这将返回一个HTML元素,您将其传递给要使用的变量。

如果取消注释console.log - 您会看到变量内部是什么。

function revealControls()  
{ 
    var controlsCover = document.getElementById("controlsCover"); 
    /* console.log(controlsCover) */ 
    controlsCover.style.display ="none" 
} 

function hideControls() 
{ 
    var controlsCover = document.getElementById("controlsCover"); 
    controlsCover.style.display ="block" 
} 
+0

因此,Chrome和Safari足够聪明,可以在抛出“未定义”错误之前检查变量是否以HTML元素的形式存在? – Amberlamps

+2

到达那里比我快! @Amberlamps没有看到你的完整代码很难说为什么它可以在其他浏览器中工作, –

+0

@AbePetrillo - 我真的试过了:p – Glycerine

2

您需要document.getElementById返回值赋给controlsCover变量:

var controlsCover = document.getElementById("controlsCover"); 

修正将是:

function revealControls() { 
    var controlsCover = document.getElementById("controlsCover"); 
    controlsCover.style.display ="none" 
} 

function hideControls() { 
    var controlsCover = document.getElementById("controlsCover"); 
    controlsCover.style.display ="block" 
} 
0

试试这个:

var ele =document.getElementById("controlsCover"); 
ele.style.display = "none"; 
0

试试这个:

function revealControls()  
{ 
    var oControlsCover = document.getElementById("controlsCover"); 

    if (oControlsCover) { 
    oControlsCover.style.display ="none"; 
    } 
} 

function hideControls() 
{ 
    var oControlsCover = document.getElementById("controlsCover"); 

    if (oControlsCover) { 
    oControlsCover.style.display ="block"; 
    } 
}