2012-03-27 5 views
1

のイベントハンドラを有効化、無効化コードです:http://jsfiddle.net/4WyPq/jQueryのは、ここにリンク

だから基本的に私は、「ボタン1」をクリックしたとき、それはボタンを無効にし、その後アニメーション化し、その後、私はbutton2をを押して、その「ボタン1」イベントを有効にする必要がありますもう一度 'button1'を押すと、同じイベントが実行されます。

答えて

2

クリックイベントをリンクにバインドするときは、クリックハンドラ機能を含める必要があります。

$(this).bind('click'); 

ハンドラ機能がないため何もしません。再バインドする場合は、クリックハンドラ関数を再度渡す必要があります。 Clickハンドラを独自のローカル関数に分割し、clickイベントをバインドするたびにその関数を使用することで、これを行うことができます。

function bindA1(force) { 
    var a1 = $('.a1'); 
    if (force || a1.hasClass("disabled")) { 
     a1.click(function() { 
      $(this) 
       .addClass("disabled") 
       .unbind("click") 
       .animate({"top": "+=50px"}, "slow"); 
      return(false); 
     }).removeClass("disabled"); 
    } 
} 

bindA1(true); 

$('.a2').click(function() { 
    bindA1(); 
    return(false); 
}); 

ここにデモの作業:あなたは本当にこのようなリンクのためのハンドラを有効または無効にする場合http://jsfiddle.net/jfriend00/3kjaR/

を、ちょうどあなたがチェックプロパティを設定する方が簡単かもしれあなたはこのようなことを行うことができます実際にイベントハンドラを削除するのではなく、

あなたはこのようにフラグを使用することができ

$('.a1').click(function(){ 
    if (!$(this).data("disabled")) { 
     $('.a1').animate({"top": "+=50px"}, "slow"); 
     $(this).data("disabled", true); 
    } 
}); 

$('.a2').click(function(){ 
    $(".a1").data("disabled", false); 
}); 
​ 

がここにデモの作業:

  • 再び使用aを、それをバインドするハンドラ
  • 使用.on()を削除するhttp://jsfiddle.net/jfriend00/NSZ8P/

  • +0

    私はこの1つは使いやすいと思います。私はuを選びます。jfriend00 – test

    2
    • 使用.off()再使用可能な結合機能

    demo

    $(function() { 
    
        function clickHandler() { 
         $(this).animate({ 
          "top": "+=50px" 
         }, "slow").off('click'); 
         return false; 
        } 
    
        $('.a1').on('click', clickHandler); 
    
        $('.a2').on('click',function() { 
         $('.a1').on('click', clickHandler); 
         return false; 
        }); 
    });​ 
    
    +3

    'a2'を連続してクリックすると' a1'に重複するクリックハンドラが与えられるので、注意が必要です。 – jfriend00

    +0

    @ jfriend00良い点があります。 – Joseph

    0

    私はあなたのバイオリンで演奏し、あなたに別のオプションを与え、代わりにバインドイベントのメモリ位置をいじり、すべてが混乱するので...これを試してみてください。

    http://jsfiddle.net/4WyPq/2/

    $('.a1').click(function(){ 
        if(!$(this).hasClass("disabled")){ 
         $(this).addClass("disabled"); 
         $('.a1').animate({"top": "+=50px"}, "slow"); 
        } 
    }); 
    
    $('.a2').click(function(){ 
        $(".a1").removeClass("disabled"); 
    }); 
    
    +0

    また、要素の.data()を使うこともできますが、IEはちょっとしたことがありますので、これは避けてください。しかし、jfriend00は別の答えに良い例があります。 – Relic