2011-07-21 10 views
4

アンバインドで削除されたイベントを保存して後で再適用する方法を教えてください。そのonclickイベントに添付機能の様々な数を持っているアンバインドで削除されたイベントを取得して後で再適用するにはどうすればよいですか?

<div id="thediv">The Div</div> 

は、私は、この要素を持っていると仮定します。

$("#thediv").unbind("click"); 

後でそれらを再結合するように、私は結合していない機能を保存することができます方法:私は、私はすべてのonclickの機能を削除するためにアンバインド使用することができます知っていますか?

これはjQuery 1.5で動作する必要があることに注意してください。


私はthis previous answerを見ましたが、私はそれについて理解していなかったものがいくつかあり:

  • は、なぜそれが最初に結合して、バインド解除されますか?
  • ary_handlers[idx]は何をしているのですか?

(彼らは結合していない機能をキャプチャについての私の質問に対する解決策を説明するために必要な場合を除き、私は本当に、これらの質問に対する答えを探していないよ。)

答えて

3

私はあなたがこのような何かを行うことができると思います。 divのクローンを作成し、データ( 'events')をオブジェクトに保存することによって、divのイベントを保存します。その後、オブジェクトを反復してイベントをバインドし直します。あなたは、元のデータ(「イベント」)が削除されたイベントのバインドを解除したときので、クローンを作成する必要があり

<div id='my'>my</div> 

var my = $('#my'); 
my.click(function(){ 
    alert('my'); 
}); 

my.hover(function(){ 
$(this).css('color', 'red'); 
    }); 

my.click(function(){ 
    alert('you'); 
}); 

var ev =my.clone(true).data('events'); 

my.unbind(); 

for (var e in ev){ 
    //you have to iterate on the property since is an array with all the handlers for the same event) 
    for (i= 0; i < ev[e].length; i++){ 
     my.bind(e, ev[e][i]); 
    } 
} 

fidlle http://jsfiddle.net/pXAXW/

EDIT(私はあなたが探しているものを理解願っています) - 。この作業を行うにはそれらが異なって保存されるので、1.5.2であなたはちょうどあなたがイベントをバック添付する方法を変更する必要があります。

$(document).ready(function(){ 

    var theDiv = $("#thediv"); 

    theDiv.click(function(){ 
    $(this).css("border-color", "blue"); 
    alert("Click!"); 
    }); 
     theDiv.click(function(){ 
    $(this).css("border-color", "blue"); 
    alert("clack!"); 
    }); 

    var theEvents = theDiv.clone(true).data("events"); 

    // Unbind events from the target div 
    theDiv.unbind("click"); 

    // Put the saved events back on the target div 
    for (var e in theEvents){ 
    // must iterate through since it's an array full of event handlers 
    for (i=0; i<theEvents[e].length; i++){ 
     theDiv.bind(e, theEvents[e][i].handler); 
    } 
    } 

}); 

ここフィドル:(Katiekと同じ)http://jsfiddle.net/nicolapeluchetti/CruMx/2/あなたがいない場合(イベントが二回トリガされdivを正確にクリックしてください) jquery 1.5.2 http://jsfiddle.net/pXAXW/1/を使用するように私のフィドルも更新しました

+0

これはjQuery 1.6.2(http://jsfiddle.net/UZW6T/1/)でうまくいきますが、1.5.2ではうまくいきません(http://jsfiddle.net/CruMx/1/)。 – KatieK

+0

1.5.2で動作させるには、イベントをバインドする方法で何かを変更する必要があります。別の方法で保存されているからです。 –

+0

答えを見てください。2番目のコードブロックはjQuery 1.5で動作します。ありがとう! – KatieK

関連する問題