web-dev-qa-db-fra.com

Événement jQuery bind / unbind 'scroll' sur $ (fenêtre)

J'ai cette fonction:

function block_scroll(key){
    if (key) {
        $(window).bind("scroll", function(){
            $('html, body').animate({scrollTop:0}, 'fast');
        });
    } else {
        $(window).unbind();
    }
}

La première partie fonctionne comme il se doit, mais quand j'appelle plus tard block_scroll (false) - c'est toujours un blocage. Que faire?

RE-EDIT Donc, comme suggéré, j'ai essayé ...

$(window).unbind("scroll");

... avec une certaine confusion. Au début, cela n'a pas fonctionné - puis cela a fonctionné.

Maintenant, je pense que cela a échoué car je faisais défiler le moment où block_scroll (false) a été appelé. J'ai testé cela plusieurs fois maintenant. Et oui, si je ne fais rien pendant que le script s'exécute et que block_scroll (false) est appelé - cela fonctionne. Mais ce n'est pas le cas si je défile quand on l'appelle.

45
o01
$(window).unbind('scroll');

Même si la documentation indique qu'elle supprimera tous les gestionnaires d'événements si elle est appelée sans arguments, cela vaut la peine d'essayer de la dissocier explicitement.

Mise à jour

Cela a fonctionné si vous avez utilisé des guillemets simples? Cela ne semble pas juste - pour autant que je sache, JavaScript traite les guillemets simples et doubles de la même manière (contrairement à d'autres langages comme PHP et C).

67
alex

Notez que les réponses qui suggèrent d'utiliser unbind() sont désormais obsolètes en tant que cette méthode a été déconseillée et seront supprimées dans les futures versions de jQuery.

Depuis jQuery 3.0, .unbind () est déconseillé. Il a été remplacé par la méthode .off () depuis jQuery 1.7, donc son utilisation était déjà déconseillée.

Au lieu de cela, vous devez maintenant utiliser off():

$(window).off('scroll');
15
Rory McCrossan

Essayez ceci à la place

$.unbind('scroll');

http://api.jquery.com/unbind/

2
pestaa

Tu dois:

unbind('scroll')

Pour le moment, vous ne spécifiez pas l'événement à dissocier.

1
Coin_op

essaye ça:

$(window).unbind('scroll');

ça marche dans mon projet

1
王大力

Très vieille question, mais au cas où quelqu'un d'autre tomberait dessus, je recommanderais d'essayer:

$j("html, body").stop(true, true).animate({
        scrollTop: $j('#main').offset().top 
}, 300);
0
Olavxxx