Tüm blog yazıları

JavaScript DOM Events: Event Dinleme Yöntemleri

JavaScript'te DOM olaylarını dinlemek için kullanılan 3 farklı yöntemi keşfedin! Bu kapsamlı rehberde, inline handler'lardan onclick özelliğine kadar her metodu inceleyecek, avantajlarını ve dezavantajlarını karşılaştırarak projeleriniz için en doğru yaklaşımı öğrenmenize yardımcı olacağız.

eminbasbayan5 dk okuma
JavaScript event dinleme yöntemleri kodu örnekleri ve farklı metotların görsel karşılaştırması

Bir önceki makalede DOM Events'in ne olduğunu ve neden önemli olduğunu öğrendik. Şimdi sıra geldi bu olayları nasıl dinleyeceğimize. JavaScript'te event'leri dinlemenin üç farklı yolu var ve bu makalede hepsini inceleyeceğiz. Spoiler: Sadece birini kullanmanızı önereceğim!

Yöntem 1: Inline Event Handlers (HTML İçinde)

Bu yöntem, event handler'ı doğrudan HTML elementinin içine yazmaktır. En eski ve en önerilmeyen yöntemdir.

Nasıl Çalışır?

html
<button onclick="alert('Merhaba!')">Tıkla Beni</button>

Gerçek Hayat Örneği: Hesap Makinesi Butonları

html
<div class="hesap-makinesi">
    <button onclick="sayiyiEkle(1)">1</button>
    <button onclick="sayiyiEkle(2)">2</button>
    <button onclick="sayiyiEkle(3)">3</button>
    <button onclick="topla()">+</button>
    <button onclick="sonucuGoster()">=</button>
</div>

Bu Yöntemin Dezavantajları

❌ HTML ve JavaScript karışıyor: Kodunuz dağınık ve okunması zor hale geliyor.

❌ Tırnak işareti karmaşası: JavaScript kodunu HTML attribute'u içinde yazarken tırnak işaretlerine dikkat etmeniz gerekiyor.

html
<!-- Bu çok karışık görünüyor! -->
<button onclick="mesajGoster('Merhaba'); alert('İkinci mesaj')">Tıkla</button>

❌ Kod tekrarı: Aynı işlevi yapan 10 butonunuz varsa, hepsine aynı kodu yapıştırmanız gerekir.

html
<!-- 10 buton için 10 kez aynı şeyi yazmak mı? Hayır! -->
<button onclick="urunuSil(1)">Sil</button>
<button onclick="urunuSil(2)">Sil</button>
<button onclick="urunuSil(3)">Sil</button>
<!-- ... ve böyle devam ediyor -->

❌ Güvenlik riski: Kötü niyetli kullanıcılar XSS saldırıları yapabilir.

Yöntem 2: onclick Property (JavaScript'te)

Bu yöntem biraz daha iyi. JavaScript dosyamızda elementi seçip, onclick özelliğine bir fonksiyon atıyoruz.

Nasıl Çalışır?

javascript
const buton = document.querySelector('#benimButon');

buton.onclick = function() {
    console.log('Butona tıklandı!');
};

Gerçek Hayat Örneği: Tema Değiştirici

javascript
const temaButonu = document.querySelector('.tema-degistir');
const sayfa = document.body;

temaButonu.onclick = function() {
    if (sayfa.classList.contains('karanlik-tema')) {
        sayfa.classList.remove('karanlik-tema');
        sayfa.classList.add('aydinlik-tema');
        temaButonu.textContent = '🌙 Karanlık Mod';
    } else {
        sayfa.classList.remove('aydinlik-tema');
        sayfa.classList.add('karanlik-tema');
        temaButonu.textContent = '☀️ Aydınlık Mod';
    }
};

Önceden Tanımlı Fonksiyon Kullanma

Fonksiyonu ayrı tanımlayıp atayabiliriz:

javascript
function selamVer() {
    console.log('Merhaba!');
    console.log('Nasılsınız?');
}

const buton = document.querySelector('#selamButonu');
buton.onclick = selamVer; // Dikkat: selamVer() değil, selamVer

⚠️ Önemli: Fonksiyonu atarken parantez kullanmıyoruz! selamVer() yazarsak fonksiyon hemen çalışır, selamVer yazarsak sadece referansını atamış oluruz.

Bu Yöntemin Problemi: Tek Event Handler Sınırı

javascript
const buton = document.querySelector('#ozelButon');

// İlk handler
buton.onclick = function() {
    console.log('Birinci işlem');
};

// İkinci handler - BU BİRİNCİYİ EZİYOR!
buton.onclick = function() {
    console.log('İkinci işlem');
};

// Tıklandığında sadece "İkinci işlem" yazılır!

Bu, normal bir JavaScript objesi gibi düşünün:

javascript
const araba = { renk: 'mavi' };
araba.renk = 'kırmızı';
// Artık araba.renk sadece 'kırmızı', 'mavi' kayboldu!

Yöntem 3: addEventListener (En İyi Yöntem) ⭐

Bu, modern JavaScript'te event'leri dinlemenin standart ve önerilen yoludur.

Nasıl Çalışır?

javascript
const buton = document.querySelector('#benimButon');

buton.addEventListener('click', function() {
    console.log('Butona tıklandı!');
});

Sözdizimi

javascript
element.addEventListener('eventTürü', callbackFonksiyonu);
  • eventTürü: Dinlemek istediğimiz olayın adı (string olarak)
  • callbackFonksiyonu: Olay gerçekleştiğinde çalışacak fonksiyon

Gerçek Hayat Örneği: Sosyal Medya Beğeni Butonu

javascript
const begeniButonu = document.querySelector('.begeni-btn');
const begeniSayisi = document.querySelector('.begeni-sayisi');
let sayi = 0;

begeniButonu.addEventListener('click', function() {
    sayi++;
    begeniSayisi.textContent = sayi;
    begeniButonu.classList.add('begenildi');
    
    // Küçük bir animasyon efekti
    begeniButonu.style.transform = 'scale(1.2)';
    setTimeout(function() {
        begeniButonu.style.transform = 'scale(1)';
    }, 200);
});

Avantaj 1: Birden Fazla Event Handler

javascript
const kaydetButonu = document.querySelector('#kaydet');

// İlk handler
kaydetButonu.addEventListener('click', function() {
    verileriKaydet();
});

// İkinci handler - BU İLKİNİ EZMİYOR!
kaydetButonu.addEventListener('click', function() {
    bildirimGoster('Kaydedildi!');
});

// Üçüncü handler
kaydetButonu.addEventListener('click', function() {
    analizGonder('kaydet_butonu_tiklandi');
});

// Tıklandığında ÜÇÜ DE çalışır!

Avantaj 2: Farklı Event Türleri

javascript
const kart = document.querySelector('.urun-karti');

// Fare üzerine gelince
kart.addEventListener('mouseenter', function() {
    kart.classList.add('vurgulu');
});

// Fare ayrılınca
kart.addEventListener('mouseleave', function() {
    kart.classList.remove('vurgulu');
});

// Çift tıklanınca
kart.addEventListener('dblclick', function() {
    favorilereEkle();
});

Avantaj 3: Ek Seçenekler

addEventListener üçüncü bir parametre olarak seçenekler alabilir:

javascript
// Sadece bir kez çalışsın
buton.addEventListener('click', function() {
    console.log('Bu sadece bir kez yazılacak!');
}, { once: true });
javascript
// İlk tıklamada çalışır, sonra otomatik olarak kaldırılır
const tekKullanim = document.querySelector('#tek-kullanim');

tekKullanim.addEventListener('click', function() {
    alert('Tebrikler! Kuponunuz aktif edildi.');
    tekKullanim.disabled = true;
    tekKullanim.textContent = 'Kullanıldı';
}, { once: true });

Avantaj 4: Event Listener'ı Kaldırabilme

javascript
function tiklamaHandler() {
    console.log('Tıklandı!');
}

// Ekle
buton.addEventListener('click', tiklamaHandler);

// Sonra kaldır
buton.removeEventListener('click', tiklamaHandler);

Karşılaştırma Tablosu

ÖzellikInlineonclickaddEventListener
HTML'den ayrı❌✅✅
Birden fazla handler❌❌✅
Handler kaldırabilme❌❌✅
Ek seçenekler❌❌✅
Önerilen❌❌✅

Pratik Örnek: Tüm Butonlara Event Ekleme

javascript
// Sayfadaki tüm "silme" butonlarını seç
const silmeButonlari = document.querySelectorAll('.sil-btn');

// Her birine tıklama event'i ekle
silmeButonlari.forEach(function(buton) {
    buton.addEventListener('click', function() {
        const satirId = buton.dataset.id;
        satirSil(satirId);
    });
});

Özet

Bu makalede üç farklı event dinleme yöntemini öğrendik:

YöntemÖneri
Inline Events❌ Kullanmayın
onclick Property⚠️ Mümkünse kaçının
addEventListener✅ Her zaman bunu kullanın

Neden addEventListener?

  • Birden fazla handler ekleyebilirsiniz
  • Handler'ları kaldırabilirsiniz
  • Ek seçenekler kullanabilirsiniz
  • Kod daha temiz ve bakımı kolay olur
  • Endüstri standardıdır

Bir sonraki makalede this anahtar kelimesinin event handler'larda nasıl çalıştığını inceleyeceğiz.

JavaScript Classes ile pratik uygulamalar, metotlar arası iletişim ve gerçek dünya kod örnekleri
JavaScript Dersleri9 dk okuma

JavaScript Classes - Pratik Uygulamalar

JavaScript class'ları ile pratik uygulamalara geçin! Metotlar arası iletişimden constructor'da metot çağırmaya, kod tekrarını azaltmaktan gerçek dünya senaryolarına kadar class kullanımının inceliklerini keşfedin. Kendi alışveriş sepeti örneğinizle bilginizi pekiştirin.

Yazıyı oku
JavaScript class yapısını gösteren bir kod örneği, ES6 ile modern nesne oluşturma
JavaScript Dersleri9 dk okuma

JavaScript Classes

ES6 ile JavaScript'e gelen class yapısı sayesinde nesne oluşturmak artık çok daha kolay ve düzenli! Constructor function karmaşasından kurtulup, okunabilir ve yönetilebilir kodlar yazmak isteyenler için modern JavaScript'in temel taşı olan class'ları tüm detaylarıyla keşfedin. Bu rehberle nesne şabl

Yazıyı oku
JavaScript kodunda Constructor Function ve new keyword'ü ile nesne oluşturma örnekleri
JavaScript Dersleri8 dk okuma

Constructor Functions ve new Keyword

Factory Function'ların hafıza israfı sorununa Constructor Function'lar ve new keyword'ü ile son verin! Metotları paylaştırarak JavaScript objelerini daha verimli nasıl oluşturacağınızı, new'in perde arkasında neler yaptığını ve prototype sisteminin gücünü bu rehberde keşfedin.

Yazıyı oku

Çerez tercihlerin

Platformun çalışması için zorunlu çerezler kullanıyoruz. İzin verirsen anonim kullanım verilerini ölçüyoruz. Ayrıntıları incele