2013-11-03 74 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; 
    } 
}); 

你应该做一个回调函数的整体工作。不是两个。否则,这些功能是启用/禁用对方。