Farkı anlamıyorum, ikisi de aynı görünüyor ama sanırım öyle değiller.
Birini veya diğerini ne zaman kullanacağınıza dair herhangi bir örnek takdir edilecektir.
Farkı anlamıyorum, ikisi de aynı görünüyor ama sanırım öyle değiller.
Birini veya diğerini ne zaman kullanacağınıza dair herhangi bir örnek takdir edilecektir.
Yanıtlar:
Ben cevabında tamamen doğrudur - bu yüzden söylediklerini aklınızda bulundurun. Sana anlatmaya üzereyim tam açıklama değildir, ancak nasıl hatırlamak çok kolay bir yolu var e.target
, e.currentTarget
iş fare olayları ve görüntüleme listesine göre:
e.target
= Farenin altındaki şey (ben'in dediği gibi ... olayı tetikleyen şey).
e.currentTarget
= Noktadan önceki şey ... (aşağıya bakınız)
Dolayısıyla, bir klip içinde örnek adı "btns" olan 10 düğme varsa ve şunları yaparsınız:
btns.addEventListener(MouseEvent.MOUSE_OVER, onOver);
// btns = the thing before the dot of an addEventListener call
function onOver(e:MouseEvent):void{
trace(e.target.name, e.currentTarget.name);
}
e.target
10 düğmeden biri olacak ve e.currentTarget
her zaman "btns" klibi olacaktır.
MouseEvent'i bir ROLL_OVER olarak değiştirirseniz veya özelliği btns.mouseChildren
false olarak ayarlarsanız e.target
ve e.currentTarget
her ikisinin de her zaman "btns" olacağını belirtmek gerekir.
currentTarget
her zaman olayı dinleyen nesnedir; target
etkinliği alan gerçek hedeftir. Olay köpürme başına hedef olayı alır ve görüntüleme listesini oluşturur. (Ya olay yakalama için tersi)
e.target
olay göndericinin tetiklemesini tetikleyen e.currentTarget
şeydir ve dinleyicinizi atadığınız şeydir.
Görsel cevapları severim.
Tıkladığınızda #btn
, iki olay işleyici çağrılır ve resimde gördüklerinizi çıktılar.
Burada demo: https://jsfiddle.net/ujhe1key/
Event.target öğesinin, örneğin farklı eylemleri tetiklemek için tek bir dinleyici kullanmak için yararlı olabileceğini belirtmek gerekir. Diyelim ki içinde 10 düğmeli tipik "menü" hareketli grafiğiniz var, bunu yapmak yerine:
menu.button1.addEventListener(MouseEvent.CLICK, doAction1);
menu.button2.addEventListener(MouseEvent.CLICK, doAction2);
etc...
Sadece şunları yapabilirsiniz:
menu.addEventListener(MouseEvent.CLICK, doAction);
Ve event.target öğesine bağlı olarak doAction (event) içinde farklı bir işlemi tetikleyin (name özelliğini kullanarak, vb.)
örnek ver:
var body = document.body,
btn = document.getElementById( 'id' );
body.addEventListener( 'click', function( event ) {
console.log( event.currentTarget === body );
console.log( event.target === btn );
}, false );
'btn' düğmesini tıkladığınızda 'true' ve 'true' görünecektir!
e.currentTarget her zaman olay dinleyicisinin eklendiği bileşeni döndürür.
Öte yandan, e.target bileşenin kendisi veya herhangi bir doğrudan çocuk veya büyük çocuk veya büyük-büyük çocuk vb. Olabilir. Başka bir deyişle, e.target, Görüntüleme Listesi hiyerarşisinde en üstteki bileşeni döndürür ve alt hiyerarşisinde veya bileşenin kendisinde olmalıdır.
Tuvalde birden fazla Görüntünüz olduğunda ve Görüntüleri bileşenin içine değil Tuval'e sürüklemek istediğinizde bir kullanım olabilir. Canvas'a bir dinleyici ekleyebilirsiniz ve bu dinleyicide Canvas'ın sürüklenmemesini sağlamak için aşağıdaki kodu yazabilirsiniz.
function dragImageOnly(e:MouseEvent):void
{
if(e.target==e.currentTarget)
{
return;
}
else
{
Image(e.target).startDrag();
}
}
target is the element that triggered the event (e.g., the user clicked on)
currenttarget is the element that the event listener is attached to.
Düğmenin alt öğesini tıklatırsanız, CHT'de e.target kullanmak bazen sorun olan öznitelikleri algılamak için currentTarget kullanmak daha iyidir.
e.currentTarget, olayın kaydedildiği öğe (üst), e.target ise olayın işaret ettiği düğüm (alt öğe).