it-swarm.com.de

jQuery Bind / Unbind 'Scroll'-Ereignis auf $ (Fenster)

Ich habe diese Funktion:

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

Der erste Teil funktioniert so, wie er sollte, aber wenn ich später block_scroll (false) aufrufe, blockiert er immer noch. Was tun?

RE-EDIT Also wie vorgeschlagen habe ich versucht ...

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

... mit einiger Verwirrung. Zuerst hat es nicht funktioniert - dann hat es funktioniert.

Jetzt denke ich, dass es fehlgeschlagen ist, weil ich im Moment des Aufrufs von block_scroll (false) gescrollt habe. Ich habe das jetzt schon mehrmals getestet. Und ja, wenn ich nichts tue, während das Skript ausgeführt wird und block_scroll (false) aufgerufen wird, funktioniert es. Aber es ist nicht so, wenn ich scrolle, wenn es aufgerufen wird.

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

Obwohl die Dokumentation besagt, dass alle Ereignishandler entfernt werden, wenn sie ohne Argumente aufgerufen werden, lohnt es sich, sie explizit zu entbinden.

Aktualisieren

Es hat funktioniert, wenn Sie einfache Anführungszeichen verwendet haben? Das klingt nicht richtig - meines Wissens behandelt JavaScript einfache und doppelte Anführungszeichen gleich (im Gegensatz zu einigen anderen Sprachen wie PHP und C)).

67
alex

Beachten Sie, dass die Antworten, die die Verwendung von unbind() vorschlagen, jetzt veraltet sind, da diese Methode veraltet ist und in zukünftigen Versionen entfernt wird von jQuery.

Ab jQuery 3.0 ist .unbind () veraltet. Es wurde seit jQuery 1.7 durch die .off () -Methode abgelöst, sodass von seiner Verwendung bereits abgeraten wurde.

Stattdessen sollten Sie jetzt off() verwenden:

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

Versuchen Sie dies stattdessen

$.unbind('scroll');

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

2
pestaa

Du brauchst:

unbind('scroll')

Momentan geben Sie nicht das Ereignis an, dessen Bindung aufgehoben werden soll.

1
Coin_op

versuche dies:

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

es funktioniert in meinem Projekt

1
王大力

Sehr alte Frage, aber für den Fall, dass jemand anderes darüber stolpert, würde ich empfehlen, Folgendes zu versuchen:

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