2013-03-26 37 views
0
$('.selected').removeClass('selected'); 
$(this).addClass('selected'); 

在添加上面兩行代碼之前,整個函數都起作用了。現在,只有這兩行工作,當我點擊和我的代碼的其餘部分沒有。如果我刪除這兩行,代碼再次工作。什麼可以刪除一個類並添加一個類可能會毀了這個函數的其餘部分?我在這裏做錯了什麼?爲什麼addClass和removeClass打破了我的jQuery?

$(document).ready(function(){ 
    var subject; 
    $('.subject').mouseenter(function(){ 
     if ($(this).hasClass(subject)) { 
      return 0; 
     } 
     else { 
      $(this).find('.info, img').fadeTo('fast', 1); 
     } 
    }); 
    $('.subject').mouseleave(function(){ 
     if ($(this).hasClass(subject)) { 
      return 0; 
     } 
     else { 
      $(this).find('.info').fadeTo('fast', 0); 
      $(this).find('img').fadeTo('fast', 0.8); 
     } 
    }); 

    // BELOW IS WHERE THE PROBLEM IS 

    $('[class$=-link]').click(function(){ 
     $('.selected').removeClass('selected'); // Why do these lines break the 
     $(this).addClass('selected');   // rest of this function? 
     $('.' + subject).find('.info').fadeTo('fast', 0); 
     $('.' + subject).find('img').fadeTo('fast', 0.8); 
     subject = $(this).attr('class').replace("-link",""); 
     $('.'+ subject).find('.info, img').fadeTo('fast', 1); 
    }); 
}); 

http://jsfiddle.net/n4SUX/2/

+1

哪個確切換行嗎?你知道這個背景下的$(this)嗎? – lifetimes 2013-03-26 12:42:45

+0

啊哈!看起來'$(this).addClass('selected');'是什麼打破了代碼。這與'this'有關嗎? – 2013-03-26 12:44:34

+0

@Syon mouseenter和mouseleave綁定到'.subject'類,刪除並添加'.selected'。這怎麼能打破?我寧願說選擇器中的'this'確實存在問題。 @Brett:什麼是由'[class $ = - link]'選擇器選擇的? – 2013-03-26 12:47:04

回答

2

據我所知,你想是這樣的(避免了需要改變的HTML):

$('[class$=-link]').click(function(){ 
    $('.selected').removeClass('selected'); 
    $('.' + subject).find('.info').fadeTo('fast', 0).end().find('img').fadeTo('fast', 0.8); 
    subject = $(this).attr('class').replace("-link","");//execute this line while "selected" class is not present 
    $('.'+ subject).find('.info, img').fadeTo('fast', 1); 
    $(this).addClass('selected');//add after everything else is complete 
}); 
+0

完美地工作,謝謝! – 2013-03-26 14:22:29