Çözüldü JavaScript ile radio button'a tıklanınca CSS değiştirme

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

01yildizmustafa

Centipat
Katılım
4 Eylül 2022
Mesajlar
63
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Problem:
Kullanıcı radio butonlardan herhangi birine tıklayınca ilgili elementin arka plan rengini değiştirmek istiyorum.
Fakat hata alıyorum.
(Aldığım hatanın resmini koydum)

GitHub:
Kodlar burada
 

Dosya Ekleri

  • js-hata.png
    js-hata.png
    8,4 KB · Görüntüleme: 96
Çözüm
@serhatcandev

Yeni başladım.
Bir türlü kodu doğru şekilde yazamadım.
İstediğim tam olarak şu:
5 tane radio buton var.
Kullanıcı herhangi birine tıkladığında arka plan rengi değişecek.
Kullanıcı seçimini değiştirince arka plan eski haline gelecek.
Bu sefer yeni seçilen radio butonun arka planı değişecek.
Bak şimdi istersen önce normal bir şekilde yapmayı dene. Bir buton aç html'de. JavaScript'de bunu tanımla. Sonrasında ise addEventListener ver. click olduğunda arka plan rengi değişsin. Önce bunu yap sonrasında ise radiobutonları querySelectorAll ile seç ve forEach ile döndürmeyi dene.

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
@serhatcandev
Kod:
var labels = document.querySelectorAll("label");
        labels.forEach(function(label){
            label.addEventListener("click", function(){
                if(label.style.backgroundColor = "yellow") {
                    label.style.backgroundColor = "orange";
                }
                else if(label.style.backgroundColor = "orange"){
                    label.style.backgroundColor = "yellow";
                }
            })
        })

Böyle bir şey yaptım ama olmadı.
Else if yapma. Direkt olarak else ver. Arka plan rengi hep sarı ve turuncudan oluşuyor değil mi
 
@serhatcandev
Kod:
<script>
        // 1. değişiklik yapılacak element grubunu seç.
        // 2. seçtiğin element grubunun her bir elemanına ulaş
        // 3. ulaştığın elemanı dinle
        // 4. gerekli değişikliği yap

        var labels = document.querySelectorAll("label");

        labels.forEach(function(label) {
            label.addEventListener("click", function() {
                if (label.style.backgroundColor = "purple") {
                    label.style.backgroundColor = "green";
                } else {
                    label.style.backgroundColor = "purple"
                }
            })
        })
    </script>

Normalde buton rengi purple. Kullanıcı birine tıkladığında rengi green olucak, oluyor da.
Fakat öteki radio butona tıklanınca ilkinin eski haline yani purple rengine dönmesi gerek.
Else if yerine direk else verdim, olmadı.

Yani anahtar gibi: biri green olduğunda diğeri purple, purple olduğunda öteki green olucak. Aynı anda ikisi aynı renk olmasın.

----------------------------------------------------------------------------------------------------------------------------------------------------------

@serhatcandev

Sonuç:
İstediğim kutuya tıklayınca rengini değiştirebiliyorum.

Amaç:
Bu kutulardan herhangi birine tıklayınca eğer hali hazırda rengi değişmiş(zaten daha önce tıklanmış) bir kutu varsa o eski rengine dönsün. Yeni tıklanan kutu rengini değiştirsin.


Başından beri amacım yukarıda dediklerim.
 

Dosya Ekleri

  • a.png
    a.png
    10,1 KB · Görüntüleme: 24
Son düzenleme:
@serhatcandev
Kod:
<script>
        // 1. değişiklik yapılacak element grubunu seç.
        // 2. seçtiğin element grubunun her bir elemanına ulaş
        // 3. ulaştığın elemanı dinle
        // 4. gerekli değişikliği yap

        var labels = document.querySelectorAll("label");

        labels.forEach(function(label) {
            label.addEventListener("click", function() {
                if (label.style.backgroundColor = "purple") {
                    label.style.backgroundColor = "green";
                } else {
                    label.style.backgroundColor = "purple"
                }
            })
        })
    </script>

Normalde buton rengi purple. Kullanıcı birine tıkladığında rengi green olucak, oluyor da.
Fakat öteki radio butona tıklanınca ilkinin eski haline yani purple rengine dönmesi gerek.
Else if yerine direk else verdim, olmadı.

Yani anahtar gibi: biri green olduğunda diğeri purple, purple olduğunda öteki green olucak. Aynı anda ikisi aynı renk olmasın.

----------------------------------------------------------------------------------------------------------------------------------------------------------
Sonuç:
İstediğim kutuya tıklayınca rengini değiştirebiliyorum.

Amaç:
Bu kutulardan herhangi birine tıklayınca eğer hali hazırda rengi değişmiş(zaten daha önce tıklanmış) bir kutu varsa o eski rengine dönsün. Yeni tıklanan kutu rengini değiştirsin.

Başından beri amacım yukarıda dediklerim.
Tebrik ederim sizi böyle devam edin. Eminim ki çok bilgi yüklenmiştir bu projede.
 
@serhatcandev

Tam olarak istediğime ulaşamadım, az kaldı.

Şimdi 5 tane kutu var.
Bunlardan birine tıklayınca renk değişiyor = tamam
Şimdi varsayalım "1" numaralı kutuya tıkladım ve rengi değişti.
Şimdi de "4" numaralı kutuya tıkladım, onun da rengi değişti.
4 numaralının rengi değişirken "1" numaralı kutunun eski haline dönmesi gerek.
Yani kullanıcı 5 tane kutu içinden aynı anda birden fazla kutunun rengini değiştiremez.
 

Dosya Ekleri

  • a.png
    a.png
    10,1 KB · Görüntüleme: 17
X
@serhatcandev

Tam olarak istediğime ulaşamadım, az kaldı.

Şimdi 5 tane kutu var.
Bunlardan birine tıklayınca renk değişiyor = tamam
Şimdi varsayalım "1" numaralı kutuya tıkladım ve rengi değişti.
Şimdi de "4" numaralı kutuya tıkladım, onun da rengi değişti.
4 numaralının rengi değişirken "1" numaralı kutunun eski haline dönmesi gerek.
Yani kullanıcı 5 tane kutu içinden aynı anda birden fazla kutunun rengini değiştiremez.
Contains'i biliyor musunuz?
 
@serhatcandev
Hiç sormadan deneyin bence. Hemen YouTube'a JavaScript contains yazın, 5 dakika da anlatırlar o yöntem ile yapmayı deneyebilirsiniz.
Araştırırken includes metodu ile karşılaştım.
Seçili olanı bir diziye ata daha sonra da dizide olan elemanın arka planını değiştir gibi...
Uğraştım, yapamadım.
Siz en başından, sanki sıfırdan kendiniz yazıyor olsaydınız nasıl ilerlerdiniz?


@serhatcandev

Sorunu hallettim.
Teşekkürler :)

Kodlar:


Kod:
<script>
        var labels = document.querySelectorAll("label");


        labels.forEach(function(label) {

            label.addEventListener("click", function() {

                labels.forEach (function(label) {
                    label.style.backgroundColor = "purple";
                })

                label.style.backgroundColor = "red";
            })
        })
    </script>
 
Son düzenleme:

Yeni konular

Geri
Yukarı