Event.target, Event.toElement ve Event.srcElement arasındaki fark nedir?


88

Takip koduna sahibim:

document.oncontextmenu = function(evt) {
    evt = evt || window.event;
    console.log(evt.target, evt.toElement, evt.srcElement);
};

A üzerinde farenin sağ tuşuna tıklandığında <div class="foo"></div>, şunu döndürür:

div.foo, div.foo, div.foo

A üzerinde farenin sağ tuşuna tıklandığında <input>, şunu döndürür:

girdi, girdi, girdi

Görünüşe göre hepsi aynı sonucu getiriyor. Birinin diğerlerinden farklı kullanımının olduğu bir durum var mı?

Yanıtlar:


80

Olay hedefi olayı gönderilir hangi elementtir:

DOM olay akışı kullanılarak bir olayın hedeflendiği nesne . Olay hedefi, özniteliğin değeridir .Event.target

srcElementIE'yi elde etmenin standart olmayan bir yoludur target.

Geçerli olay hedefi şu anda çağrılır olay dinleyicisi öğedir:

Bir olay akışında, geçerli olay hedefi , halihazırda gönderilmekte olan olay işleyiciyle ilişkili nesnedir . Bu nesne, olay hedefinin kendisi veya atalarından biri OLABİLİR . Şimdiki olay hedef olarak değişen etkinlik çeşitli boyunca nesneye nesneden husule fazlar olay akışının. Mevcut olay hedefi, Event.currentTargetözniteliğin değeridir .

thisBir olay dinleyicisinin içinde kullanmak , geçerli olay hedefini elde etmenin yaygın (ve standart) bir yoludur.

Bazı tür olayların bir relatedTarget:

EventTargetOlayın türüne bağlı olarak, bir UI olayı ile ilgili bir ikincil tanımlamak için kullanılır .

fromElementve toElementIE'nin relatedTarget.


7
Chrome 60 sürümünde "toElement" kullanıyorum - bunun "IE standart dışı bir yol" olduğundan emin misiniz?
PandaWood

2
MSDN, "standart dışı" olduğunu ve "web'e bakan üretim sitelerinde kullanmayın" diyor: developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
TetraDev

en son chrome "toElement" i destekler ancak Mozilla Firefox'u desteklemez. Mozilla'daki birkaç durumu desteklemek için 'hedef' özelliğini kullanmak zorunda kaldım.
Vishal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.