JavaScript обычно является однопоточным - это означает, что пока функция выполняется в браузере, никакой другой код не может выполняться одновременно - включая обработчики событий, такие как onclick (они будут запускаться только после завершения функции). Таким образом, в этом случае вы не можете прервать выполнение функции из кода.
Есть два обходных пути:
Длительная функция может намеренно делать перерывы, позволяя выполнять другой код.
//set this to true from an event handler to stop the execution
var cancelled = false;
function longRunningFunction() {
if (cancelled) {
return;
}
// do some work, but not all
// save your progress to be able to resume when called again
if (!done) {
// release control, so that handlers can be called, and continue in 10ms
setTimeout(longRunningFunction, 10);
}
}
Использование веб-работников . Они позволяют выполнять код параллельно, но имеют некоторые ограничения и поддерживаются не всеми браузерами.