0

ページスクロールアニメーションが完了した後unbind、要素を試してから元に戻そうとしています:bind

$(".trigger").click(function(){
  $(".class1 a, .class2 a").unbind();
  $('html, body').stop().animate({scrollTop: $('#container').offset().top}, 1000);
  $(".class1 a, .class2 a").bind();
});

.class1 aしかし、拘束されることはあり.class2 aませんか?

4

2 に答える 2

1

アニメーションの後にイベント ハンドラーをバインドし直したい場合は、コールバック関数を使用する必要があります。また、ハンドラを再バインドするには、イベント タイプとコールバックを渡す必要があります。

$(".trigger").click(function(){
  $(".class1 a, .class2 a").unbind();
  $('html, body').stop().animate({scrollTop: $('#container').offset().top}, 1000, function(){
      $(".class1 a, .class2 a").bind('sometype', somefunction);          
  });
});
于 2012-12-13T00:05:11.777 に答える
0

bindバインドを解除した後にイベントを実行すると、そのイベントの情報はありませんprevious handler.

したがって、 handler を割り当てる必要がありますevery time you bind the event

$(".class1 a, .class2 a").bind(handler);

$(".trigger").click(function(){
  $(".class1 a, .class2 a").unbind();
  $('html, body').stop()
                 .animate({scrollTop: $('#container')
                 .offset().top}, 1000);
  $(".class1 a, .class2 a").bind(handler);
});

function handler(e){
   alert('Hey !!');
}

前者が後者に取って代わられているため、.on() /.off() 代わりに使用することもできます...bind()/.unbind()

 $(".trigger").on('click', function(){
      $(".class1 a, .class2 a").off('click');
      $('html, body').stop()
                     .animate({scrollTop: $('#container')
                     .offset().top}, 1000);
      $(".class1 a, .class2 a").on('click' , handler);
    });

    function handler(e){
       alert('Hey !!');
    }
于 2012-12-13T00:00:23.487 に答える