2012-04-11 18 views
0

私は自分のウェブサイトのオンラインカレンダーを作成しており、jqueryのremoveClassとaddClass関数を使用して、選択した日の背景を変更したいと考えています。スクリプトは、最初のクリックで正常に機能し、古い日の背景がデフォルトの色に移動され、クリックされた日(td)が強調表示されます。ただし、その後のクリックでは強調表示された色が維持されます。つまり、複数の選択日があります。jquery removeClassが2回目または3回目のクリック後にCSSを取得していません。

私は、.on()live()と他の投稿からのさまざまなif関数を含むさまざまなソリューションを試しました。

$('#calendarGrid td').on("click", function() { 
    $('#calendarGrid td').removeClass('today');   
    $(this).addClass('today'); 
}); 

私のCSSは次のようになります。私がいるかのように振る舞うよりJavaScriptを持っているとき

#calendarGrid .wEnd{background: #DDD;} 
#calendarGrid .wDay{background: #EEE;} 
#calendarGrid .today{background: #99BBEE;} 

とここに私のテーブル全体を我慢せずに、HTML不思議な

<table id="calendarGrid"> 
    <tr> 
     <td name='2012-04-07' class='wEnd today' id='a6'>7</td> 
     <td name='2012-04-08' class='wEnd' id='b0'>8</td> 
     <td name='2012-04-09' class='wDay' id='b1'>9</td> 
    </tr> 
<table> 

です.todayが削除されましたが、CSSは.todayです。

アドバイスありがとうございます。

+0

それの意味論がありますが、 '確保したい場合があります。今日はカレンダーの今日のために、 '.active'は下の私の例のように別の日付をクリックすると使用します。 – pixelbobby

+0

Pixelbobbyありがとう - 良いアドバイス。 –

+0

1. IE6をサポートする必要がない場合、なぜ複数のクラスを使用しないのですか?あなたは代表団を使用する必要があります、パフォーマンスはより良いでしょう。 3. JSfiddleをセットアップするか、jsbinが大いに役立つでしょう) – vincicat

答えて

1

私はあなたのためのJSFiddleを作成しました。すべてが動作しているように見える...

HTML

<table id="calendarGrid" cellpadding="5" cellspacing="5" border="1"> 
    <tr> 
     <td name='2012-04-07' class='wEnd today active' id='a6'>7</td> 
     <td name='2012-04-08' class='wEnd' id='b0'>8</td> 
     <td name='2012-04-09' class='wDay' id='b1'>9</td> 
    </tr> 
<table> 

CSS

#calendarGrid td{ 
    padding: 20px; 
    cursor: pointer; 
} 

#calendarGrid td.active{ 
    background-color: #000; 
    color: #fff; 
} 

JS

$(document).ready(function(){ 
    $('#calendarGrid td').live('click', function(){ 
     $('#calendarGrid td').removeClass('active'); 
     $(this).addClass('active'); 
    }); 
});​ 

+0

こんにちは、ありがとう、私はあなたのコードを試して、私のページで同じ結果を得たが、このコードは、私はページから他のコードをたくさん削除したときに働いた。同じセレクタ上で動作する別のコードセクションとホバーイベントとの間には、ある程度の相互作用があるようです。これがイベントの伝播/バブリングの問題かどうかを試しています。 –

+0

@Fooksie、まあ、それはこのポストの外の何かでなければなりません。しかし、一度解決すれば、これを答えにしてください); – pixelbobby

-1

あなたはこのようtoggleClassを使用してみてください。

$("#calendarGrid td").on('click', function(){ 
    //$(this) = #calendarGrid td 
    $(this).toggleClass("today"); 

}) 
+0

これは彼がやりたいことではありません。彼は前の要素の「今日の」クラスを削除しようとしていて、そのクラスを今クリックしたクラスに追加しようとしています。トグルが助けになりません。 – Interrobang

+0

これは動作しません。 – pixelbobby

0

コードがcorrect.Probablyいくつかのスクリプトの前にGoogleのLIBSを入れjqueryのlibs.Tryのバグのようです:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
+0

このアドバイスをいただきありがとうございます。私は昨夜、この問題を抱えていたことを認めなければなりません。 –

関連する問題