2017-02-17 3 views
0

В настоящее время я работаю над курсовой работой в области компьютерных наук, где нам необходимо автоматизировать последовательность светофора с помощью кнопок, например «Traffic Lights On» или «Traffic Lights off». Когда я запускаю свою программу через отладчик Internet explorer, я получаю код ошибки: «Значение свойства« Таймер »имеет значение null или undefined, а не объект Function» в строке 5 моего кодирования, хотя я определил его как функция позже в скрипте. Мое программирование можно найти ниже:JavaScript Traffic Light Sequence: значение свойства «Timer» имеет значение null или undefined, а не объект Function

<!DOCTYPE html> 
<html> 
<body> 
<p> 
    <button type="button" onclick="Timer()"> Start Lights</button> 
    <button type="button" onclick="StopTimer()"> Stop lights</button> 
</p> 

<img id = "TrafficLight" src="http://imgur.com/FHT9OoG.jpg"> 
<script> 
var TrafficLightList = [ 
    "http://imgur.com/FHT9OoG.jpg", 
    "http://imgur.com/XZ1PxGh.jpg", 
    "http://imgur.com/5DUX0Wy.jpg", 
    "http://imgur.com/WpeEMZU.jpg" 
]; 
var Automation = 0; 
var TimeBetweenChange = null; 

function ChangeLightAutomated() { 
    if(Automation == TrafficLightList.length) Automation = 0; 
    var Light = document.getElementById("TrafficLight"); 
    image.src = TrafficLightList[Automation]; 
    image.alt = TrafficLightList[Automation] //debugger 
    Automation = Automation + 1; 
} 

function Timer() { 
    if(!TimeBetweenChange) { 
     TimeBetweenChange = self.setTimeBetweenChange(ChangeLightAutomated,  1000); 
    } 
} 

function StopTimer() { 
    self.clearTimeBetweenChange(TimeBetweenChange); 
    TimeBetweenChange = null; 
} 

</body> 
</script> 
</html> 

Как я уже говорил ранее, ошибка, как представляется, в строке 5 программы, как «Таймер» не определен, даже если я определить, что функция таймера находится на линии 28 .

ответ

0

В коде есть несколько неопределенных переменных, например var Light = document.getElementById("TrafficLight");, а затем image.src = TrafficLightList[Automation];, и в этом случае image не определен. Кроме того, нет ни одного self.

Вот рабочий пример того, что вы хотите сделать:

var timer = (function() { 
 
    var trafficLightList = [ 
 
     "http://imgur.com/FHT9OoG.jpg", 
 
     "http://imgur.com/XZ1PxGh.jpg", 
 
     "http://imgur.com/5DUX0Wy.jpg", 
 
     "http://imgur.com/WpeEMZU.jpg" 
 
    ]; 
 
    var automation = 0; 
 
    var interval = null; 
 

 
    function changeLightAutomated() { 
 
     if(automation == trafficLightList.length) automation = 0; 
 
     var image = document.getElementById("TrafficLight"); 
 
     image.src = trafficLightList[automation]; 
 
     image.alt = trafficLightList[automation] //debugger 
 
     ++automation; 
 
    } 
 

 
    function startTimer() { 
 
     interval = setInterval(changeLightAutomated, 1000); 
 
    } 
 

 

 
    function stopTimer() { 
 
     clearInterval(interval) 
 
    } 
 

 
    return { 
 
     start: startTimer, 
 
     stop: stopTimer 
 
    } 
 
})() 
 

 
document.getElementById('start').addEventListener('click', function() {timer.start()}) 
 
document.getElementById('stop').addEventListener('click', function() {timer.stop()})
<!DOCTYPE html> 
 
<html> 
 
<body> 
 
<p> 
 
    <button type="button" id="start"> Start Lights</button> 
 
    <button type="button" id="stop"> Stop lights</button> 
 
</p> 
 

 
<img id = "TrafficLight" src="http://imgur.com/FHT9OoG.jpg"> 
 
<script> 
 

 
</script> 
 

 
</body> 
 
</html>

-1

Добавить идентификаторы для кнопок:

<input type="button" id="button1_id" value="Some description" onclick="Timer()"> 
<input type="button" id="button1_id" value="Some description" onclick="StopTimer()"> 

я тоже добавил значение, поэтому кнопка имеет текст внутри. Изменить 'Некоторые описание' в какой-то наводящий текст

И затем, для каждого субдомена (на JavaScript):

var timerSelector = document.getElementById("button1_id"); 
timerSelector.onclick = Timer; 

var stopTimerSelector = document.getElementById("button2_id"); 
stopTimerSelector.onclick = StopTimer; 

или просто:

document.getElementById("button1_id").onclick= Timer; 
document.getElementById("button2_id").onclick = StopTimer; 

Добавьте эти строки в JavaScript.

Дайте мне знать, если проблема решена.

Смежные вопросы

 Смежные вопросы