Bölüm 17

Events (Olaylar)

Programlamada, events (olaylar), bir sistem tarafından size bildirilen ve bunlara yanıt verebilmeniz için sistemdeki eylemler veya olaylardır. Örneğin, reset düğmesine tıkladığınızda girişi temizler.

Klavyeden gelen etkileşimler, anahtarın durumunu serbest bırakılmadan önce yakalamak için sürekli olarak okunmalıdır. Diğer zaman alıcı hesaplamalar yapmak, bir klavye basımını kaçırmanıza neden olabilir. Bu, bazı ilkel makinelerin giriş işleme mekanizması used to. Bir adım daha ileri gitmek, bir kuyruk kullanmaktır, yani yeni olaylar için kuyruğu periyodik olarak kontrol eden ve buna tepki veren bir programdır. Bu yaklaşıma polling denir.

Bu yaklaşımın ana dezavantajı, her an kuyruğa bakması gerektiğinden, bir olay tetiklendiğinde kesintilere neden olmasıdır. Bunun için daha iyi bir mekanizma, kod bir olay gerçekleştiğinde bilgilendirmektir. Modern tarayıcılar bunu, belirli olaylar için işlevleri handlers olarak kaydetmemize izin vererek yaparlar.

<p>Click me to activate the handler.</p>
<script>
  window.addEventListener("click", () => {
    console.log("clicked");
  });
</script>

Burada, addEventListener window nesnesi (tarayıcı tarafından sağlanan yerleşik nesne) üzerinde çağrılır ve tüm window için bir handler kaydeder. addEventListener yöntemini çağırmak, ilk argümanında tanımlanan olay meydana geldiğinde ikinci argümanının çağrılmasını kaydeder.

Olay dinleyicileri, yalnızca olay, kaydolundukları nesnenin bağlamında gerçekleştiğinde çağrılır.

Bazı yaygın HTML olayları burada belirtilmiştir:

Event Description
onchange Form girişinin değeri değiştirildiğinde veya değiştirildiğinde
onclick Kullanıcı, öğeye tıkladığında
onmouseover Fare imleci öğenin üzerine geldiğinde
onmouseout Fare imleci öğeden ayrıldığında
onkeydown Kullanıcı anahtarı basıp sonra bırakır
onload Tarayıcı yüklemeyi tamamladığında

Çocukları olan düğümlere kaydedilen handlers, çocuklardan da olaylar alabilir. Örneğin, bir paragraf içindeki bir düğme tıklandığında, paragrafta kaydedilen handlers de tıklama olayını alır.

Olay handler, event nesnesi üzerindeki stopPropagation yöntemini çağırarak, daha ilerideki handlers'ın olayı almasını engelleyebilir. Bu, örneğin, tıklanabilir bir elemanın içinde bir düğmeniz varsa ve bir düğme tıklamasından dış elemanın tıklanabilir davranışını tetiklemek istemiyorsanız kullanışlıdır.

<p>A paragraph with a <button>button</button>.</p>
<script>
  let para = document.querySelector("p"),
      button = document.querySelector("button");
  para.addEventListener("mousedown", () => {
    console.log("Paragraph handler.");
  });
  button.addEventListener("mousedown", event => {
    console.log("Button handler.");
    event.stopPropagation();
  });
</script>

Burada, mousedown handlers hem paragraf hem de düğme tarafından kaydedilir. Düğmeye tıklandığında, düğme için handler stopPropagation çağırır, bu da paragraftaki handler'ın çalışmasını engelleyecektir.

Olayların varsayılan bir davranışı olabilir. Örneğin, bağlantılar, bağlantının hedefine tıklandığında gezinir, aşağı ok düğmesine tıklandığında sayfanın altına yönlendirilir vb. Bu varsayılan davranışlar, event nesnesi üzerindeki preventDefault yöntemini çağırarak önlenebilir.

<a href="https://developer.mozilla.org/">MDN</a>
<script>
  let link = document.querySelector("a");
  link.addEventListener("click", event => {
    console.log("Nope.");
    event.preventDefault();
  });
</script>

Burada, tıklandığında bağlantının varsayılan davranışı önlenir, yani bağlantının hedefine yönlendirilmez.

results matching ""

    No results matching ""