2013-11-03 121 views
0

這是我的代碼。我想使用addClass來切換課程,出於某些原因,我不想使用toggleClass。這裏我遇到的問題是添加了名爲selected的css類,但未將其替換爲not_selectedisSelected=0僅表示td被選中或沒有。addClass工作不正常

<script type="text/javascript"> 


var isSelected = 0; 

$("td").click(function(){ 
    if(isSelected==0) 
    { 
     $(this).removeClass('not_selected'); 
     $(this).addClass('selected'); 
     isSelected=1; 
    } 

}); 

$("td").click(function(){ 
    if(isSelected==1) 
    { 
     $(this).removeClass('selected'); 
     $(this).addClass('not_selected'); 
     isSelected=0; 
    } 
}); 

下面是我的css代碼:

.selected 
{ 
    background: black; 
    color:white; 
    font-weight: bold; 
} 

.not_selected 
{ 
    background: white; 
    color:black; 
    font-weight: normal; 
} 
+0

你爲什麼附加2個聽衆到同一個事件(點擊)? – melancia

+0

問題是您正在使用兩個處理程序。他們兩人都跑了,第二個人解除了第一個的影響。 – Barmar

+0

查看[toggleClass](http://api.jquery.com/toggleClass/) – Barmar

回答

1

嘗試兩個冷凝成一個單一的功能。這是 可能 保證(感謝Barmar!)一個處理程序在另一個處理程序之前運行,然後自動將其切換回不需要的處理程序。這樣,它將一舉檢查isSelected==0isSelected==1

$("td").click(function(){ 
    if(isSelected==0) 
    { 
     $(this).removeClass('not_selected'); 
     $(this).addClass('selected'); 
     isSelected=1; 
    } else if(isSelected==1) 
    { 
     $(this).removeClass('selected'); 
     $(this).addClass('not_selected'); 
     isSelected=0; 
    } 
}); 
+0

您不需要第二個'if',只需使用'else',因爲0和1是唯一的可能性。 – Barmar

+0

這不僅僅是可能的,它保證了一個處理程序在另一個之前運行,因爲Javascript是單線程的。 – Barmar

+0

我正在離開空間,因爲Labeeb想要在最後一個'else'子句中做一些錯誤檢查,但如果片段全部存在,那麼您是對的。 – Evan

1

看看這個小提琴:http://jsfiddle.net/bukfixart/NYGh5/

的問題是事件處理程序

$("td").click(function(){ 
    if(isSelected==0) 
    { 
     $(this).removeClass('not_selected'); 
     $(this).addClass('selected'); 
     isSelected=1; 
    } else { 
     $(this).removeClass('selected'); 
     $(this).addClass('not_selected'); 
     isSelected=0; 
    } 
}); 

你應該做一個回調函數的整體工作。不是兩個。否則,這些功能是啓用/禁用對方。