在jQuery中重复数组循环

时间:2017-06-07 21:34:49

标签: jquery arrays loops

我试图让jQuery片段循环并继续显示数组中的消息。这是我到目前为止的工作,即使我使用了setTimeout函数,它也不会在一次之后循环。

我做错了什么?什么是最佳实践?为什么?

提前致谢

    var obj = $("div");
    var arr = $.makeArray(obj);
    var len = arr.length;
    var i = 0;


    function printloop() {
        arr[i].style.display = "block";
        i++;
        if (i < len) {
            setTimeout(printloop, 2000);
        } else {
            setTimeout(function() {
                    $("div").css("display", "none");
            },1000);
        };
    }
    printloop();

    setInterval(prinloop, 20000);

2 个答案:

答案 0 :(得分:0)

如果我理解正确,在你通过所有div之后,你想再次隐藏它们并重新开始这个过程。

如果是这样,试试这个:

// ...
setTimeout(function() {
    $("div").css("display", "none");
    i = 0; // start back at the first div
    printloop();
}, 1000);

请注意,setInterval来电printloop prinloopvar arr = $.makeArray($('div')); var i = 0; function printloop() { arr[i].style.display = "block"; i++; if (i < arr.length) { setTimeout(printloop, 2000); } else { setTimeout(function() { $("div").css("display", "none"); i = 0; printloop(); }, 1000); } } printloop();},但我认为你根本不想要那条线路。我建议删除它。

完整的工作示例:

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div style="display:none">Div 1</div>
<div style="display:none">Div 2</div>
<div style="display:none">Div 3</div>
&#13;
public void setProperty(int var) {
    if(var > 0){
    propertySupport.firePropertyChange("var", this.var,var);
    this.var = var;
    }else{
       System.out.println("bla bla"); 
    }
}

//methods
public void addPropertyChangeListener(PropertyChangeListener listener) {
    propertySupport.addPropertyChangeListener(listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
    propertySupport.removePropertyChangeListener(listener);
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您只需要setInterval()阅读文档:

  • setTimeout(function,milliseconds)
  • 在等待指定的毫秒数后执行一个函数。

  • setInterval(function,milliseconds)
  • 与setTimeout()相同,但不断重复执行该函数。

    使用此,我希望能帮到你。

    &#13;
    &#13;
    var obj = $("div");
            var arr = $.makeArray(obj);
            var len = arr.length;
            var i = 0;
    
            function printloop() {
                if (i >= len) {
                    i = 0
                    $("div").css("display", "none");
                };
                arr[i].style.display = "block";
                i++;
            }
            printloop();
    
            setInterval(printloop, 2000); // setInterval(prinloop, 20000); not work because prinloop is undefined
    &#13;
    div{ display: none;}
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div>
    H
    </div>
    <div>
    E
    </div>
    <div>
    L
    </div>
    <div>
    L
    </div>
    <div>
    O
    </div>
    &#13;
    &#13;
    &#13;