函数未定义,但我已经定义了它

Function is undefined, but i had defined it

我是一名 PLC 程序员,我制作了一个 html 页面,我需要每秒刷新一次脚本,所以在我的 body 中我放置了:

    <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 选项,脚本也无法正常工作。

试试这个

function changeImage(){
  ....
}

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

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

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

代码笔中的示例: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);
}

Anyway i get the error: ReferenceError: changeimage is not defined

setInterval(function changeimage() {

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

因此它不会在此 setInterval 范围之外可见,并且对于您的 bodyonload 事件侦听器它不会 visible

解法:

您应该在全局范围内定义 changeimage() 函数(在 setInterval 之外,如下所示:

<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>

可以看到working in this Demo.

注:

确保将脚本标记放在 HTML 页面的 headbody 标记之前,以便可以在 onload 事件侦听器中访问它。