功能未定义,但是我已经定义了

时间:2019-12-30 07:53:37

标签: javascript function setinterval onload

我是一名PLC程序员,我制作了一个html页面,我需要每秒刷新一次脚本,因此我将其放在我的体内:

    <body onload="changeimage()">

.... code ....

</body>

和脚本:

<script>
setInterval(function changeimage() {
var sonde = ["Sonda1","Sonda2","Sonda3","Sonda4"];
var tsonde = ["tsonda1","tsonda2","tsonda3","tsonda4"];
var temperature = [:="OUTPUT".AlarmTemp.Sonda1:,:="OUTPUT".AlarmTemp.Sonda2:,:="OUTPUT".AlarmTemp.Sonda3:,:="OUTPUT".AlarmTemp.Sonda4:];
var hotcold = document.getElementById("Fiocco");
if (:="OUTPUT".Stagione.Estate: > 0){
      hotcold.src="sun.jpg"}
if (:="OUTPUT".Stagione.Inverno: > 0){
      hotcold.src="Neve.png"}    
 for (x in temperature) {
           var icona = document.getElementById(sonde[x]);
                     if (temperature[x] > 0 ){
               icona.src="Paverde.png"
           }
           else{
               icona.src="Parossa.png"
           }

     }
}, 1000);   
</script>

无论如何我都会得到错误: ReferenceError:未定义changeimage

P.S .:不要被以“:”开头的数组所迷惑,这是PLC语法,是正确的。

@即使删除了setinterval选项,该脚本也不起作用。

3 个答案:

答案 0 :(得分:1)

首先定义函数,并确保脚本已加载。

代码笔中的示例:https://codepen.io/mikila85/pen/NWPvQPE

function changeimage() {
    setInterval(function() {
        var sonde = ["Sonda1","Sonda2","Sonda3","Sonda4"];
        var tsonde = ["tsonda1","tsonda2","tsonda3","tsonda4"];
        var temperature = [:="OUTPUT".AlarmTemp.Sonda1:,:="OUTPUT".AlarmTemp.Sonda2:,:="OUTPUT".AlarmTemp.Sonda3:,:="OUTPUT".AlarmTemp.Sonda4:];
        var hotcold = document.getElementById("Fiocco");

        if (:="OUTPUT".Stagione.Estate: > 0){
            hotcold.src="sun.jpg"
        }
        if (:="OUTPUT".Stagione.Inverno: > 0){
            hotcold.src="Neve.png"
        }

        for (x in temperature) {
            var icona = document.getElementById(sonde[x]);
            if (temperature[x] > 0 ){
                icona.src="Paverde.png"
            }
            else{
                icona.src="Parossa.png"
            }

        }
    }, 1000);
}

答案 1 :(得分:1)

  

无论如何我都会收到错误:ReferenceError: changeimage is not defined

setInterval(function changeimage() {

确定它不会是defined,因为它仅被定义为callback调用的setInterval()函数

因此,在此setInterval范围之外,它是不可见的,对于visible的{​​{1}}事件监听器,它也不是onload

解决方案:

您应该在全局范围内(body之外)定义changeimage()函数,

setInterval

您可以看到它 working in this Demo

注意:

确保将脚本标签放在<head> <script> function changeimage() { var sonde = ["Sonda1", "Sonda2", "Sonda3", "Sonda4"]; var tsonde = ["tsonda1", "tsonda2", "tsonda3", "tsonda4"]; var temperature = [: = "OUTPUT".AlarmTemp.Sonda1: ,: = "OUTPUT".AlarmTemp.Sonda2: ,: = "OUTPUT".AlarmTemp.Sonda3: ,: = "OUTPUT".AlarmTemp.Sonda4: ]; var hotcold = document.getElementById("Fiocco"); if (: = "OUTPUT".Stagione.Estate: > 0) { hotcold.src = "sun.jpg" } if (: = "OUTPUT".Stagione.Inverno: > 0) { hotcold.src = "Neve.png" } for (x in temperature) { var icona = document.getElementById(sonde[x]); if (temperature[x] > 0) { icona.src = "Paverde.png" } else { icona.src = "Parossa.png" } } } setInterval(changeimage(), 1000); </script> </head> <body onload="changeimage()"> .... code .... </body>标签之前的head页面的HTML页面中,以便可以在body事件监听器中对其进行访问。

答案 2 :(得分:0)

尝试

function changeImage(){
  ....
}

// if you need to call every 1 sec
setInterval(changeImage,1000);

// else
changeImage();  or // setTimeout(changeImage,1000)