How to Use setTimeout in a for…loop

后端 未结 4 1146
北恋
北恋 2021-01-16 11:35

What I want is this (news ticker type functionality):

  1. Get a list of li\'s from a ul tag
  2. Loop through all the li\'s and get the text
  3. display t
4条回答
  •  温柔的废话
    2021-01-16 11:51

    As Greg mentioned the problem is with the closure only evaluating once. Nobody posted a solution for this so here is one. This uses adding a function that generates the callback function each time:

    Add:

    function getShowTextCallback(text) {
        return function(){showText(text)}
    }
    

    Then use it in loop like this:

    for(var x=0; x < li.length; x++){
        var li_text = li[x].childNodes[0].nodeValue;
        setTimeout(getShowTextCallback(li_text), 1000);
    }
    

提交回复
热议问题