2012-08-15 34 views
5

jsfiddle http://jsfiddle.net/C8B8g/7/ üzerinde gördüğünüz gibi 2 düğüme sahibim (= 2 div) "Bölge" ve "Kaynak". Her div fare üzerinde vurgulanır (mavi arkaplan) (stackoverflow katkıda bulunanlar sayesinde JS'de hala çok kötüyüm).Başka bir DIV tıklandığında DIV rengini değiştirin

Kullanıcıların aslında bunların düğmeler olduğunu anlamadıklarını fark ettim, bu nedenle yapmak istediğim şey, varsayılan olarak mavi arka plan ile vurgulanacak "Bölgemiz" metnini içeren ilk DIV'ye sahip olmaktır. "Kaynak" metnini içeren diğer div tıklandığında beyaz arka plana geri dönün (bu durumda "kaynağımız" arka planı maviye dönüşür).

cevap

6

bu deneyin ... "geçerli" CSS'deki ancak başarılı olamadı kullanarak bazı testler yapılmıştır: Güncelleme: Here is working jsFiddle.

$('.activity-title a:first').css({'background-color':'#f00','color':'#fff'}); 
//for setting first button highlighted by default, 
//don't forgot to define document.ready before this 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.activity-title a').css({'background-color':'#fff','color':'#467FD9'}); 
    $(this).css({'background-color':'#f00','color':'#fff'}); 

    $('.textzone:visible').stop().fadeOut(500, function() { 
    //don't forgot to add stop() for preventing repeat click conflict 
     $('#' + region).fadeIn(500); 
    }); 

    return false; 

});​ 
+0

yazınız. –

+0

Teşekkürler - Harika çalışıyor! Varsayılan olarak vurgulanan ilk düğmeye sahip olmanın bir yolu var mı? (sağdaki metin bölgesi görünür olduğundan, bu, insanların her bir düğmenin bir metin bölgesiyle ilişkili olduğunu anlamalarına yardımcı olur) – Greg

+0

@Greg i yanıt arkadaşımı güncelledi, bu css değerlerini bir sınıfa veya kimliğe atayabilir ve removeClass'ı kullanabilirsiniz./addClass yöntemleri ama jss ile css nasıl değiştirileceğini sordunuz, bu yüzden bu şekilde cevap verdim. –

1
try with this exemple: 
<div id="target"> 
Test1 
</div> 
<div id="other"> 
    Test2 
</div> 

<script> 
$("#target").click(function() { 
    $('#target').css({'background':'blue'}); 
$('#other').css({'background':'white'}); 
}); 

$("#other").click(function() { 
    $('#other').css({'background':'blue'}); 
    $('#target').css({'background':'white'}); 
}); 
</script> 
5

seçilen div

.source-selected { 
    background-color:#00F; 
} 

Ekleme için stil ekleyin Bu sınıf varsayılan div'ınıza. Kodunuzdaki bazı kısımları vardı olarak

http://jsfiddle.net/dmvcQ/1

+1

Yaklaşımını önlediğinden, yaklaşımınızı daha iyi seviyorum css. Ancak bu, dönüşümlü olarak sınıfı uygular, hangi bağlantıyı tıklattığınız önemli değildir. Ekledikten önce başka bir satır eklemeniz gerekir, bunun gibi bir şey: '$ ('. Source-selected'). ToggleClass ('source-selected');' – Jeemusu

+0

Muhtemelen kontrol etmek istersiniz kodunuz hepsini seçtikçe en yakın ('. kaynak-başlık-kutusu'). – Jeemusu

+0

Haklısın, hızlı olmaya çalışıyordum;) Kemanı düzelttim ve cevabını yorumlarına göre güncelledim. Teşekkürler. –

3

Tamam bir cevap sonrası karar:

if(!$(this).closest('.source-title-box').hasClass('source-selected')) 
{ 
    $('.source-title-box').toggleClass('source-selected'); 
} 

güncellenmiş keman deneyin (güncellendi) Tıklama işleyicisi için bu satırları ekleyin adreslemek istedim.

Her şeyden önce, bir return false; yerine, jQuery event.preventDefault(); işlevini kullanabilirsiniz. Son sonuç temelde aynıdır, ancak bu şekilde jQuery'yi başka bir kodu çalıştırmadan önce en başında hiçbir şey yapmamaya çapa söylemek için kullanabiliriz.

My güncellenmiş Javascript kodu:

$('.source-title-box a').click(function(event) { 

    // Stop the default anchor behaviour 
    event.preventDefault(); 

    // Lets check if the clicked link is already active 
    // And if it is active, don't let them click it! 
    if($(this).closest('div').hasClass('active')) { 
     return false; 
    } 

    // Now lets remove any active classes that exist 
    $('.active').toggleClass('active'); 

    // And apply an active class to the clicked buttons 
    // parent div 
    $(this).closest('div').toggleClass('active'); 

    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(500, function() { 
     $('#' + region).fadeIn(500); 
    }); 
});​ 

ekledim CSS:

.active { 
    background-color:#467FD9; 
    color:#fff; 

} 
.active a { 
    cursor:default; /* Don't show the hand cursor */ 
    color:#fff; 
} 

A Çalışma örneği:

http://jsfiddle.net/dmvcQ/3/

emin değilim geçerli HTML eğer markup'ın aklında başka bir amacı var, ancak şu anki stilleri ve functionali Ty sadece <a href="#" data-region="source-region">Our region</a> ile elde edilebilir, bunları <div> ve <span> içine sarmanız gerekmez. Burada Örneğin

sadece çapa etiketleriyle aynı kod şudur: http://jsfiddle.net/dmvcQ/7/

Eğer cevap ile ilgili herhangi bir sorunuz varsa bana bildirin.

+1

Cevabınız için teşekkürler Jeemusu! Canlı ortamdaki herhangi bir sebepten dolayı ("http://goo.gl/fOHGN" kaynağında "kaynak" sayfasına tıklayın) ilk 'buton' jsfiddle'da olduğu gibi varsayılan olarak vurgulanmamaktadır. Nedenini biliyor musun Teşekkürler – Greg

+1

Etkin sınıfı, varsayılan olarak seçilecek şekilde gösterilecek html öğesine eklediniz mi? Nasıl ayarlayacağımı görmek için Js kemanımı kontrol et. – Jeemusu

+0

Oops, Ben bunu özledim - Tamam şimdi, yardımlarınız için çok teşekkürler! – Greg

1

Ya bunu esas jQuery

bir çalışma örneği yapabilirsiniz: Bu gelişmiş cevaplar için downvoted neden

http://jsfiddle.net/razmig/GhbjS/

$('.activity-title a:first').css({ 
    "background-color": "#467FD9", 
    "color": "#fff" 
}); 


$('.activity-title a').mouseover(function() { 
    $('.activity-title a').css({ 
     "background-color": "#fff", 
     "color": "#467FD9" 
    }); 
    $(this).css({ 
     "background-color": "#467FD9", 
     "color": "#fff" 
    }); 

}); 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(2000, function() { 
     $('#' + region).fadeIn(2000); 
    }); 

    return false; 

}); 
+0

Cevabınız ve çalışma örneğiniz için teşekkür ederiz. Href değerini href = "#" olarak değiştirdiğini fark ettim. Ne yazık ki benim durumumda (bölüm başına 1 div ile bir sayfa düzeni) işe yaramazsa (düğmeyi tıklamak sayfanın yukarı çıkmasını sağlar. – Greg

+1

sadece href = "javascript: void (0)" veya jquery u event.preventDefault() öğesini kullanabilir – Razmig