У меня есть этот сегмент кода, который позволяет вам устанавливать изменения CSS на задержку по времени. Он отлично работает, за исключением того, что он позволяет вам иметь только один экземпляр, в то время как мне нужно, чтобы он позволял многим. В настоящее время он просто берет последний элемент из цикла и сохраняет функцию таймаута. Есть ли способ разрешить сохранение и запуск всех функций тайм-аута из этого цикла? Я думаю, что только функция setTimeout переопределяется каждый раз, а не является уникальной функцией.Javascript не может иметь несколько функций setTimeout в цикле
Примечание: Я не подвожу ошибку НЕТ консольного
Javascript (внутри функция загрузки)
elems = _('[data-timecss]'); //function to return elems via querySelectorAll()
for (var i=0; i<elems.length; i++) {
var tempelem = elems[i];
var c_info = elems[i].dataset.timecss.split(","); //split to get time
setTimeout(function() {
var css_e = c_info[1].split(";"); //split to get css properties
for (var c=0; c<css_e.length; c++) {
var css_elem = css_e[c].split(":"); //split property and value
tempelem.style.setProperty(css_elem[0], css_elem[1]); //set value
}
}, c_info[0]); //set time
}
HTML,
<div class="block">
<p data-timecss="2000,color:green;font-weight:bold;">Change to green after 2000ms</p>
<p data-timecss="5000,display:none;">Hide this block after 5000ms</p>
</div>
Каких данные timecss является последним, будет работать правильно. Поэтому я могу сказать, что функция тайм-аута просто переоценивается каждый раз. Есть ли у кого-нибудь идеи о том, как сделать их уникальными, но и сохранить их такими же динамичными, как у меня?
Что в elems? Вы уверены, что он содержит не только второй тег p? – evilunix
Вы переписываете tempelem на каждой итерации, чтобы все таймеры действовали на последнем. Поскольку первый таймер не будет работать до тех пор, пока цикл не будет завершен. Как предлагает Jaromanda X, вам понадобятся закрытия. – andrrs
@evilunix да, я уверен. Если я поставлю предупреждение в функцию, я вижу, что он дважды запускает функцию setTimeout и захватывает оба набора данных timecss. –