2011-12-09 24 views
1

私は以下のjQueryコードを持っています。コードは最初のクリックで機能しますが、もう一度同じ要素をクリックすると、もう一度反対のクラスに切り替わりません。私は間違って何をしていますか?クラス間のjQueryの切り替え

// enable on click 
$('.disabled').click(function(event) 
{ 
    $(this).removeClass("disabled").addClass("enabled"); 
    $(this).html("enabled"); 
}); 


// disable on click 
$('.enabled').click(function(event) 
{ 
    $(this).removeClass("enabled").addClass("disabled"); 
    $(this).html("disabled"); 
}); 
+0

あなたの問題は.disabledイベントが.disabledに添付されていているために、イベントを結合する目的のために(1.7以降jQueryのためか.on()).live()を見てみましょう、 クラスを削除する場合は.disabledどうすれば正常に動作するのでしょうか? – Val

答えて

4

のいずれかで必ず.link開始はあなたが将来の要素のためのイベントを定義したい場合はliveメソッドを使用する必要があります。さらにリー価格の答えに

// Select all elements which should be affected, attach a click function: 
$(".enabled, .disabled").click(function(){ 
    var $this = $(this); 
    $this.toggleClass("enabled disabled");  // Toggle class 

    var isEnabled = $this.hasClass("enabled"); // Get toggle state 
    if (isEnabled) {       // Example 
     $this.text("enabled"); 
    } else { 
     $this.text("disabled"); 
    } 
}); 
6

これを試してみてください:

$('.link').click(function(event) 
{ 
    $(this).toggleClass('enabled').toggleClass('disabled') 
}); 

.enabledまたは.disabled

+0

heres a fiddle ... http://jsfiddle.net/leeprice/TMr2j/ –

2

あなたのコードの実際の問題は、作成時にそのあるbind方法が唯一のセレクタ

別の方法と一致し、現在の要素にイベントをアタッチ2つのクリックハンドラのうち、 ".enabled"と ".disabled"は、限られた数の要素に対してのみ存在します。 1つの要素のクラスを変更すると、そのクラスは新しいクラスに属しますが、クリックハンドラはこの新しいクラスの古い要素だけを処理します。

「未来の要素」

+1

あなたは嘘の答えを広げてはいけませんか?新しい回答を作成するのとは対照的に:)彼らが関連しているように – Val

+0

あなたは正しいです...私は、stackoverflowがLeeの答えを紹介したときに質問への最初のrepsonseを書いている途中でした。私はちょうどキャンセルしてコメントに移動することを忘れていました:-) – devnull69

+0

まあ、人々はあなたを投票するだろう、私はそうではないだろうが、他の人は笑それはあなた次第です。 – Val

関連する問題