jQuery只迭代每个列表项一次

时间:2013-03-05 22:16:32

标签: jquery each preventdefault

每次在页面中滚动时都会执行一个函数。在该函数中有一个.each()函数来循环遍历所有列表项:

$('#scroller').on('appear', function() {
    $('#chart li').each(function(ev){
            // Do something
    });
});

我的问题是我只想循环遍历这些列表项一次。我尝试返回false和ev.preventDefault,但它使//做某事仅适用于第一个列表项。

我发现this post几乎相同,但应用此方法我得到一个“对象[对象数组]没有方法'应用'”错误。有什么建议吗?

2 个答案:

答案 0 :(得分:5)

在使用变量之前,只需检查一下是否已完成:

var hasLooped = false;

$('#scroller').on('appear', function() {
    if(!hasLooped){
        $('#chart li').each(function(ev){
                // Do something
        });

        hasLooped = true;
    }
});

答案 1 :(得分:2)

我认为汤姆上面的回答非常直截了当,可以为您提供所需的内容。我只是提供这个作为替代或以其他方式思考。

// create a seperate handler for it, and then unbind once it fires.
$('#scroller').on('scroll.onceMe', function() {
       $('#chart li').each(function(ev){
            // Do something
       });
    $('#scroller').unbind("scroll.onceMe");
 });

或类似的东西: - 为它创建一个独特的处理程序。

    $('#scroller').one('scroll.onceMe', function() {
       $('#chart li').each(function(ev){
            // Do something
       });
 });