web-dev-qa-db-ja.com

$(window)でのjQueryバインド/アンバインド「スクロール」イベント

私はこの機能を持っています:

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

最初の部分は正常に機能しますが、後でblock_scroll(false)を呼び出すと、まだブロックされています。ワット?

再編集だから私が試したように...

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

...いくつかの混乱を伴います。最初は動作しませんでした-それから動作しました。

今、block_scroll(false)が呼び出された瞬間にスクロールしていたため、失敗したと思います。これを数回テストしました。そして、はい、スクリプトの実行中に何もせず、block_scroll(false)が呼び出された場合-それは動作します。しかし、呼び出されたときにスクロールしている場合はそうではありません。

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

documentation は、引数なしで呼び出された場合、すべてのイベントハンドラーを削除することを示していますが、明示的にバインドを解除してみる価値があります。

更新

一重引用符を使用するとうまくいきましたか?私の知る限り、JavaScriptは単一引用符と二重引用符を同じように扱います(PHP and C)のような他の言語とは異なります)。

67
alex

unbind()を使用することを示唆する回答は、 そのメソッドは廃止されました として古くなっており、jQueryの将来のバージョンでは削除されることに注意してください。

JQuery 3.0の時点で、.unbind()は推奨されていません。 jQuery 1.7以降、.off()メソッドに取って代わられたため、その使用は既に推奨されていません。

代わりに、off()を使用する必要があります。

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

代わりにこれを試してください

$.unbind('scroll');

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

2
pestaa

必要がある:

unbind('scroll')

現時点では、バインド解除するイベントを指定していません。

1
Coin_op

これを試して:

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

それは私のプロジェクトで動作します

1
王大力

非常に古い質問ですが、他の誰かがそれに出くわした場合には、試してみることをお勧めします:

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