2010-11-06 8 views
1

Fondamentalement, j'ai une fonction jQuery qui vérifie si l'utilisateur est près du bas de la page et charge plus de choses. Lorsque le document charge cela, il est exécuté, pour vérifier.Vérification d'un élément dans jQuery?

<script type="text/javascript"> 
$(document).ready(function() { 

    var number = 5; 
    offset = 0; 

    $(window).scroll(function() { 
     if($(window).scrollTop() + $(window).height() > $(document).height() - 10) { 

      $(".empty-div").append().load('<?php bloginfo('template_url'); ?>/ajax.php?offset='+offset+number, function() { 

        var offset = offset+number;    

        setTimeout(function(){ console.log('after', $(document).height()); }, 0); 
        setTimeout(function(){ console.log('after', $(window).height()); }, 0); 



      });  

     } 

    }); 

}); 
</script> 

H/e chaque fois que j'atteins le bas de la page sur la deuxième fois, il ne refait pas la fonction de chargement. Ça marche la première fois, d'ailleurs. Des idées pour y remédier? Le truc de la console est là pour recalculer les hauteurs, juste au cas où c'est ce qui le cause.

+0

ça s'appelle le défilement infini n'est ce pas? – jcolebrand

Répondre

1
  1. vous utilisez load() là sur $ (". Empty-div"), cela n'ajouterait plus de contenu, il remplacerait le contenu (si la réponse ne change pas, vous ne verrez aucun changement)

    Il devrait être mieux quelque chose comme

    $('<div/>').appendTo(".empty-div").load(/*****/) 
    
  2. peut-être il y a aussi un problème avec le DOCTYPE. Log

    $(window).scrollTop(), $(window).height() and $(document).height() 
    

    peut-être, il diffère entre les normes - et quirks-mode.

+0

Je vais vous donner la réponse correcte, vu que votre réponse m'a conduit à chercher plus loin, et à trouver la réponse, donc d'une manière détournée, vous aviez raison. – Johnny

3

En faisant cela:

var offset = offset+number; 

Vous créez une nouvelle la variable offset locale, pas de mettre à jour votre original

offset = 0; 

déclaré avant que la fonction, donc ceci: ?offset='+offset+number utilise toujours offset comme 0, car il n'est jamais mis à jour. Il suffit de retirer le var, comme ceci:

offset = offset+number; 

Pour la propreté, ajoutez également var à la déclaration d'origine, ou utilisez une virgule pour une déclaration multiple, comme ceci:

var number = 5, offset = 0; 
+0

ou offset + = nombre :) –

+0

@Amir - oui, absolument ... Je l'ai laissé inchangé pour mieux illustrer pourquoi il * ne fonctionnait pas :) –

+0

Bien que ce fut un problème, le principal problème est la fonction de chargement ne fonctionne pas encore la deuxième fois je défile vers le bas. Ajouter plus de contenu augmente la distance au fond, et quand je défile devant le point critique, rien ne se passe. Des idées? :( – Johnny