Estoy usando jQuery para configurar un temporizador o bucle de intervalo en algunos elementos para revisarlos cada dos segundos. Intenté configurar un temporizador y comprobar si debía reiniciarlo, o configurar e intervalo, y comprobar si debía detenerlo.javascript temporizador o intervalos creados en bucle utilizando el cierre
Aunque simplificado, esto es básicamente lo que necesito:
var mytimers = new Array();
$('div.items').each(function() {
myID = $(this).attr('id');
mytimers[myID] = setInterval(function() { myFunction(myID) } , 3000)
});
function myFunction(param) {
alert(param);
if (something()) {
clearInterval(mytimers[param]);
}
}
Las identificaciones para artículos de clase son id_1, ID_2, ID_3. Pero simplemente recibo 3 alertas que dan id_3. En mi código comencé tratando de pasar 'esto', pero seguí simplificándolo para resolver el problema.
¿Cómo puedo hacer para copiar la variable a una nueva dirección cada vez? Sé que necesito usar cierres. Parece estar haciendo referencia a las otras var no importa qué.
he intentado simplificarlo a un bucle con temporizadores, así:
function tester(item) {
return function() {
alert(item);
};
}
for(x=1;x<=3;x++) {
setTimeout('(function() { tester(x) })(x)' , 3000);
}
pero creo que sólo estoy haciendo mi problema peor y eso no parece hacer nada.
He buscado las preguntas anteriores, pero la mayoría están llenas de toneladas de código adicional en lugar de reducir el problema específico y se resuelven de alguna otra manera. Me gustaría entender cómo funciona esto mejor haciendo que este ejemplo funcione. Me las arreglé, mientras escribía esto, para descubrir que puedo configurar el temporizador con una función de ayuda.
function tester(item)
alert(item);
function myTimer(item)
setInterval(function() { tester(item); }, 3000);
for(x=1;x<=3;x++)
myTimer(item);
¿Cómo se puede hacer esto sin eso? ¿Hay alguna forma mejor?
Realmente debería declarar * todas * sus variables locales con 'var', incluidos los índices de bucle. – Pointy