2011-12-07 14 views
3

以前のイベントの後に変更されたセレクタを取得するjqueryを構築するのに問題があります。Jqueryで変更されたセレクタクラスが取得されない

例えば、私はこのようになりますいくつかのHTML持っている:私は次のようにそれをクリックすると

<div class='1'>test</div> 

を:アラートの作品

$(".1").click(function(){ 
    alert('found 1!'); 
    $(this).attr('class', '2'); 
}); 

を、私は要素を検査する場合、

:クラスは、私は次のように、再びそれをクリックしたときに

今「2」に切り替えられました

まだ「見つかりました1!」警告として。

私は何かの理由で可能ではないと思っていますか、間違っているのでしょうか、それとももっと良い方法がありますか?ありがとう!あなたはjqueryの.on()(または.delegate())を使用する必要が

+1

作業には[.removeClass()](http://api.jquery.com/removeclass/)/ [.addClass()](http://api.jquery.com/addclass/)を使用してください。クラス。 CSSクラス名は数字([spec](http://www.w3.org/TR/CSS2/syndata.html#characters))で始めることはできません。 –

+0

.live()(http:// api。 jquery.com/live/)。 –

答えて

4

は、動的に更新要素のためのイベントをバインドするために機能します。コードは以下のよう

$(".1").on("click", function(){ 
    alert('found 1!'); 
    $(this).attr('class', '2'); 
}); 

$(".2").on("click",function(){ 
    alert('found 2!'); 
    $(this).attr('class', '1'); 
}); 
+0

私は "あなたは.on()(または.delegate())を使うべきです"と言っていたでしょう。 1.4.2で.delegate()が追加されたため、.live()は推奨されなくなりました。 –

+0

ありがとう@DidierG。私はそれについて知らなかった。あなたのコメントに基づいて更新されました。 –

3

.click()が実行時にのみ結合します。あなたが探しているものは.live()または.on()です。あなたが特定のDOM要素に結合されている

$(".1").click(function() 

:あなたがこれを行うと

$(document).on("click", ".1", function() { 
    console.log('1 clicked'); 
    $(this).attr('class', '2'); 
}); 
$(document).on("click", ".2", function() { 
    console.log('2 clicked'); 
    $(this).attr('class', '1'); 
}); 
+0

'.live()'は推奨されなくなりました。もう –

+0

これは本当ですが、彼が従来のjQueryを使用している場合、.on()はまだ利用できません。 – Interrobang

+0

'.delegate()'(前の '.on()')が1.4で追加されました。 –

1

:私は、)(jQueryの1.7の構文を使用します.on。いったんバインドされると、オブジェクト上のクラスはもはや重要ではありません。イベントハンドラはオブジェクト自体にバインドされています。 jQueryがこのステートメントを実行する方法は、class="1"のすべてのDOMオブジェクトを見つけて、それらにイベントリスナーを設定することです。

イベント・ハンドラは、ページの動的変更を処理したい場合は、jQueryの.live()または.delegate()(jQueryの1.6または前)またはjQueryの.on()(jQueryのを1.7以上)を使用する必要があります。

関連する問題