1

ページ内をスクロールするたびに実行される関数があります。その関数内には、すべてのリスト項目をループする.each()関数があります。

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

私の問題は、これらのリスト項目を1回だけループしたいということです。falseとev.preventDefaultを返そうとしましたが、//何かを最初のリストアイテムにのみ適用します。

この投稿はほとんど同じですが、このメソッドを適用すると、「オブジェクト[オブジェクト配列]にはメソッド'apply'がありません」というエラーが発生します。助言がありますか?

4

2 に答える 2

6

変数を使用する前に、それを行ったかどうかを確認してください。

var hasLooped = false;

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

        hasLooped = true;
    }
});
于 2013-03-05T22:23:16.827 に答える
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
       });
 });
于 2013-03-05T22:32:37.693 に答える