Çö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

Decapat
Katılım
4 Eylül 2022
Mesajlar
66
Çö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: 141
Çözüm
@bonz

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.
@bonz
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
 
@bonz
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.

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

@bonz

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: 37
Son düzenleme:
@bonz
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.
 
@bonz

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: 34
X
@bonz

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?
 
@bonz
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?


@bonz

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:

Technopat Haberler

Yeni konular

Geri
Yukarı