$.each() の外に関数の戻り値を作成し、フラグ変数を使用してボタンがクリックされたかどうかを判断します。私は通常、「window」を使用してグローバル関数と変数を宣言します。
var panicButtonClicked = false;
window.panicButtonClicked = panicButtonClicked;
var timeouts = [];
window.timeouts = timeouts;
$.each(someArray, function(index, value){
if( !panicButtonClicked )
{
timeouts.push( setTimeout(function(){
console.log(index);
}, 5000*index) );
}
});
$('#panic-button').click(function(){
//the code that should stop the looping
panicButtonClicked = true;
$.each(timeouts, function (_, id) {
clearTimeout(id);
});
});
Jonathan Lonowski によって提供された for ループを編集に含めました。アイデアは似ていますが、最初のループが実行されないようにするために追加の変数が必要になる点が異なります。これで問題は解決しますか?