Web Geliştirmede `addEventListener` vs `onclick`: Hangisi ve Neden? ⚖️

asteron

Üye
Katılım
14 Mart 2026
Mesajlar
6
Web Geliştirmede `addEventListener` vs `onclick`: Hangisi ve Neden? ⚖️

Selam dostlar! 👋 Uzun zamandır forumda JavaScript ile ilgili sorular görüyorum ve özellikle olay dinleyicileri eklerken insanların sık sık ikileme düştüğünü fark ettim. "`onclick` kullansam mı, yoksa `addEventListener` mı daha iyi?" sorusu klasikleşti. Bugün, bu iki yaklaşımı masaya yatıracağız ve hangi senaryoda hangisini tercih etmen gerektiğini, arkadaşça bir sohbet havasında konuşacağız. Hazırsan başlayalım! 🚀

Temel Fark: "Property" mi, "Listener" mı?

Öncelikle şunu netleştirelim: İkisi de aynı işi yapar (bir elemente tıklandığında bir fonksiyon çalıştırır), ama yapış şekilleri ve yetenekleri farklıdır.

  • `onclick`: Bu, HTML elementinin bir özelliğidir (property). Doğrudan element üzerinde `onclick` adında bir değer atarsın. Bir butona sadece bir tane `onclick` atayabilirsin. Yenisini atadığında eskisinin üzerine yazarsın.
  • `addEventListener`: Bu ise bir metottur. Elemente bir "dinleyici" eklemeni sağlar. En büyük avantajı, aynı elemente aynı olay (örneğin `click`) için birden fazla fonksiyon ekleyebilmen.

`addEventListener`'ın Avantajları Neler? 🏆

Neden genel olarak `addEventListener` kullanman tavsiye edilir, bir bakalım:

  • Çoklu Dinleyiciler: En kritik özellik. Farklı modüllerden gelen kodların aynı butona tıklama olayı eklemesi gerektiğinde, `addEventListener` hayat kurtarır. Hiçbiri diğerinin üzerine yazmaz.
    Kod:
    button.addEventListener('click', modulAcilisFonksiyonu);
    button.addEventListener('click', analyticsGonderFonksiyonu);
    // İkisi de çalışır!
  • Daha Fazla Kontrol: `removeEventListener` ile eklediğin dinleyiciyi sonradan kaldırabilirsin. Bu, performans optimizasyonu ve bellek yönetimi için çok önemli.
  • Olay Yakalama (Capturing) Seçeneği: Üçüncü parametre ile olayın "yakalama" (capturing) fazında mı yoksa "kabarcıklanma" (bubbling) fazında mı çalışacağını belirleyebilirsin. Bu, gelişmiş DOM olay yönetimi için gereklidir.
    Kod:
    // Üçüncü parametre `true` ise capturing fazında çalışır
    element.addEventListener('click', handler, true);
  • Daha Temiz Ayrım: HTML'in içine JavaScript kodu yazmaktan (`onclick="..."`) kaçınarak, yapıyı (HTML), stili (CSS) ve davranışı (JS) birbirinden ayırmış olursun. Bu, kodun bakımını kolaylaştırır.

Peki `onclick` Hiç mi Kullanılmamalı? 🤔

Hayır, elbette kullanılabilir! Hızlı prototipleme yaparken veya çok basit, tek seferlik bir işlem için `onclick` kullanmak pratik olabilir. Ayrıca, inline event handler olarak HTML'de kullanmak, özellikle sunucu taraflı (PHP, ASP.NET gibi) şablonlarda dinamik olarak bir fonksiyon adı yazdırmak istediğinde bazen tercih edilebilir.

Ancak unutma: HTML'de `onclick="myFunction()"` yazmak, aslında butonun `onclick` property'sine atama yapmakla aynı şeydir. Yani yine aynı kısıt geçerlidir: Sadece bir tane olabilir.

Pratik Bir Karşılaştırma ve Örnek

Bir senaryo düşünelim: Bir butonumuz var. Tıklandığında konsola "Merhaba" yazsın VE butonun arkaplan rengi değişsin.

Kod:
<!-- HTML -->
<button id="btn1">onclick ile</button>
<button id="btn2">addEventListener ile</button>

Kod:
// JavaScript - ONCLICK Yöntemi (Sorunlu!)
const btn1 = document.getElementById('btn1');

btn1.onclick = function() { console.log('Merhaba 1'); };
// ... Başka bir yerde, belki farklı bir dosyada:
btn1.onclick = function() { this.style.backgroundColor = 'lightblue'; };
// Sadece ikinci fonksiyon çalışır! "Merhaba 1" kayboldu.

Kod:
// JavaScript - ADD EVENT LISTENER Yöntemi (Sorunsuz!)
const btn2 = document.getElementById('btn2');

btn2.addEventListener('click', function() { console.log('Merhaba 2'); });
// ... Farklı bir dosyada, rahatlıkla:
btn2.addEventListener('click', function() { this.style.backgroundColor = 'lightcoral'; });
// İKİSİ de çalışır! ✅

Gördüğün gibi, `addEventListener` ile kodun modülerliği ve gelecekte genişletilebilirliği korunmuş oldu. ⚙️

Sonuç ve Tavsiyem

  • Küçük, kişisel projelerde veya hızlıca test ederken `onclick` kullanabilirsin. Canın ne isterse!
  • Ciddi, büyümesi muhtemel, takım çalışmasıyla geliştirilen herhangi bir projede kesinlikle `addEventListener` kullan.
  • `addEventListener` kullanmak, daha okunabilir, yönetilebilir ve profesyonel bir kod tabanı oluşturmanın ilk adımlarından biridir.
  • Unutma: `onclick` sadece `click` olayı içindir. `addEventListener` ise [`mouseenter`](https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseenter_event), [`keydown`](https://developer.mozilla.org/en-US/docs/Web/API/Element/keydown_event), [`scroll`](https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event) gibi [yüzlerce farklı olayı](https://developer.mozilla.org/en-US/docs/Web/Events) dinleyebilir.

Umarım bu karşılaştırma kafandaki soru işaretlerini gidermiştir. Hangisini kullanacağına artık senaryona göre daha rahat karar verebilirsin. Takıldığın bir yer olursa yorumlarda bekliyorum. Kolay gelsin! 💻
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri
Sol Reklam Alanı
Sağ Reklam Alanı