Почему я не могу управлять javascript setinterval и clearinterval?

Когда тестовый код будет setinterval, он не будет щелкать, и когда я нажимаю <div onclick = "clear()">CLEAR</div>, это тоже не clearinterval.

Как сделать для установки интервала при нажатии <div onclick = "test_fn()">TEST</div> и очистить интервал при нажатии <div onclick = "clear()">CLEAR</div>

<div onclick = "test_fn()">TEST</div>

<script>
var xxx = null;
xxx = window.setInterval(function test_fn(){
	test_xxx();
}, 5000);



function test_xxx(){
	alert("123456789");
}
</script>

<br>
<div onclick = "clear()">CLEAR</div>

<script>function clear(){
	window.clearInterval(xxx);
}
</script>

посмотрите на ошибку в консоли ... обратите внимание, что test_fn не является глобальной функцией, поэтому не виден для onclick=

Jaromanda X 25.08.2018 09:24

console счет test_fn is not defined

srimomsribo rawew 25.08.2018 09:26

попробуйте другое имя для функции clear - похоже, браузеру это не нравится (любые другие имена работают)

Jaromanda X 25.08.2018 09:27

поэтому тест на нажатие ничего не делает - но - интервал в любом случае запускается сразу

Jaromanda X 25.08.2018 09:27

Я меняю имя функции на clear_xx, он работает хорошо для clearinterval, но все равно ошибка, когда setinterval

srimomsribo rawew 25.08.2018 09:29

потому что вы пытаетесь вызвать функцию, которая не существует

Jaromanda X 25.08.2018 09:29

мне нужно установить функцию test_fn на глобальную?

srimomsribo rawew 25.08.2018 09:30

если вы хотите, чтобы атрибут onclick имел к нему доступ, тогда да

Jaromanda X 25.08.2018 09:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Скорее поместите логику для setInterval() в обработчик onclick. чем за его пределами.

  • Также измените имя clear() на любое другое. Поскольку вы вызываете document.clear () вместо своей функции. Является ли «ясно» зарезервированным словом в Javascript?

  • Вы можете использовать синтаксис толстой стрелки => из ES6 для передачи обратного вызова функция setInterval().

<div onclick = "test_fn()">TEST</div>
<br>
<div onclick = "clear_fn()">CLEAR</div>

<script>
var xxx = null;
function test_fn(){
    alert('clicked');
    xxx = window.setInterval(() => {
	    test_xxx();
   }, 5000);
}
function clear_fn(){
   alert('cleared')
   window.clearInterval(xxx);
}
function test_xxx(){
	alert("123456789");
}
</script>

Другие вопросы по теме