2013-06-19 6 views
0

J'ai une fonction im essayant d'écrire pour rendre ma barre latérale collante.Instruction jQuery ifElse ne pas exécuter les commandes 'else'

J'ai ce qui suit, cela fonctionne très bien en plaçant mon div à position: fixe, seulement lorsque je fais défiler la page, ma classe div n'est pas alors changé en position: relative.

Est-ce que quelqu'un peut repérer des failles évidentes dans ma syntaxe?

$(window).scroll(function() { 
var scrollTop = $(window).scrollTop(), 
    divOffset = $('#sidebar').offset().top, 
    dist = (divOffset - scrollTop); 

if (dist > 50) { 
    $('#sidebar').css({position:"relative",top:""}); 
} else if (dist < 50) { 
    $('#sidebar').css({position:"fixed",top:"0px","margin-left":"730px"}); 
} 
}); 
+0

Si 'dist' * est égal à * 50 alors il ne tomberait dans aucun de ces cas (ne sait pas si c'est le problème, juste une observation). Était-ce votre intention? – eldarerathis

+0

merci @eldarerathis J'ai eu> = J'essaie juste de le déboguer donc ma syntaxe est tout un désordre atm – Liam

+0

Post un peu de balisage s'il vous plaît –

Répondre

1

Ceci n'est pas un if/else. C'est un if/else if sans condition par défaut else. Je suppose que vous aurez envie de couvrir le cas où dist égal 50 en utilisant un vieux if/else plaine:

if (dist > 50) { 
    $('#sidebar').css({position:"relative",top:""}); 
} else { 
    $('#sidebar').css({position:"fixed",top:"0px","margin-left":"730px"}); 
} 

Il n'y a aucun moyen d'une de ces conditions ne sera pas execute (il n'y a pas d'erreur de syntaxe). Vous pouvez utiliser alert ou console.log pour déterminer avec certitude quelles parties de votre script sont en cours d'exécution.

Il semble que le problème soit ailleurs.

+0

Merci @sgroves, ma distance reste inchangée lorsque je connecte la valeur à la console, 356. – Liam

+0

c'est correct; vous ne changez pas 'dist' après l'avoir calculé. le problème semble être ailleurs (peut-être 'top:" "'? Cela ne me semble pas correct) – sgroves

Questions connexes