jquery
2011-05-27 16 views 0 likes 
0

私は.live()と.die()メソッドに "問題"があります。 jQuery 1.5.1を使用しています。ここ は私のシナリオでは、私はので、私はこのjQuery .live()メソッドは、クラスセレクタとidセレクタによるダイメソッド

$('#div2').die('click'); 

を行うことを試みたが、それはdoesnのリンク2を無効にしたい何らかの理由

<div id='div1' class='MyClass'>Link 1</div> 
<div id='div2' class='MyClass'>Link 2</div> 
<div id='div3' class='MyClass'>Link 3</div> 

と私のjQueryのスクリプト

$('.MyClass').live('click', function(evt) { 
    local.href = 'home.aspx' 
}); 

ですうまく動作しているようです。 クラスセレクタを使ってイベントを追加すると、idセレクタを使って同じイベントを削除できないと思います。 私のページにdivがいくつあるのかわからないので、.live()メソッドを使用する必要があります。

誰でもこの問題を「修正」する提案はありますか?

+0

ページ上にdivがいくつあるのか分からず、ページが読み込まれた後にdivs *が動的に追加されるという違いがあります。ライブはこの後者のシナリオでのみ必要です。前者のシナリオでは '.bind( 'click')'はうまく動作します。限り、クラスセレクタとidセレクタで死ぬに住んでいる限り、それは正常に動作するはずです。 「仕事がない」とはどういう意味ですか?あなたがより具体的なことができれば、私たちは援助することができます。ちょうどあなたのセレクターで 'div.MyClass'を試してみてください。 – Milimetric

+2

**ドキュメントを最初に読む[here](http://api.jquery.com/die/):** * "注:.die()が正しく機能するためには、それに使用されるセレクタが正確に一致しなければなりませんセレクタが最初に.live()で使用されました。 "* –

+1

@Faberその特定のDIVから' MyClass'クラスを削除すると自動的に問題が解決されます。それはあなたのために可能ですか? –

答えて

3

div2からクラス 'MyClass'を削除するだけです。ライブバインディングのセレクタと一致しません。

Here's an example

0

しようとする何か他のもの:

$('.mySelector').unbind('click'); 
+1

'unbind()'は 'live()'では動作しません... –

0

一つ "修正プログラム" ソリューションは、このようになります:

$('.MyClass').live('click', function(evt) { 
    if ($(this).data('disabled')) { return false; } // return if disabled 
    // do your stuff 
}); 

そして、あなたはDIVを無効にしたいときに、これを行うには、 :

$('#div2').data('disabled', true); 

これで、ライブハンドラは実行されますが、すぐに戻ります。

上記のデータ属性をtrueに設定して後で再度有効にすることもできます。

関連する問題