2012-05-18 25 views
10

HTML DOM nesne modeli, Event nesnesini with a target property tanımlar.IE9'da Event.target'e nasıl erişilir?

MSDN'de Microsoft, bir target property belgelemektedir. Onlar da Internet Explorer'ın önceki sürümlerinde gelen target takma adı olarak srcElement belge:

hedef mülkiyet Windows Internet Explorer 8 ve önceki sürümlerinde srcElement benzer.


Yani burada ben bir click kesme noktasında oturan Internet Explorer duyuyorum:

<div class="day" onclick="divClick(this)"> 

function divClick(sender) 
{ 
    var divCell = sender; 

Ve F12 Aletleri i küresel event nesne için sorabilirsiniz konsolu:

>> event 
{ 
    actionURL : "", 
    altKey : false, 
    altLeft : false, 
    behaviorCookie : 0, 
    behaviorPart : 0, 
    bookmarks : null, 
    boundElements : {...}, 
    button : 0, 
    buttonID : 0, 
    cancelBubble : false 
    ... 
} 

Ve beniçin sorabilir miyim 0 nesnesi:

>> event.target 

Veevent izlemek , hiçbir target mülkiyet yoktur:

>> event.srcElement 
{ 
    align : "", 
    noWrap : false, 
    dataFld : "", 
    dataFormatAs : "", 
    dataSrc : "", 
    currentStyle : {...}, 
    runtimeStyle : {...}, 
    accessKey : "", 
    className : "header", 
    contentEditable : "inherit" 
    ... 
} 

Ama event.target boş i erişmek nasıl Yani

enter image description here

'nin target özelliği Internet Explorer'danesnesi (9 (Belge Modu: IE9 Standartları (Tarayıcı Modu: IE9)))?

+0

JQuery gibi bir kitaplık sizin için kirli bir iş yapma izni vermeyi düşündünüz mü? – ThiefMaster

cevap

4

Öğeye eventhandler atamak için addEventListener()-metodu kullanmanız gerekir.

<div id="day" class="day"></div> 

document.getElementById('day').addEventListener('click',divClick,false); 

function divClick(e){ 
    alert(e.target); 
    divCell=this; 
    : 
} 

divClick() yılında sadece anahtar kelime this kullanarak day başvurabilir. Bağımsız değişken e, olay nesnesinin kendisine bir başvuru içerir.

BTW'de, Windows geliştirme yerine Web development için daha uygun IE belgelerini bulabilirsiniz.

+0

* "Eğer event.target'ı kullanmak istiyorsanız IE9,' addEventListener() '* 'ı kullanmanız gerekecek. * Bu konuda daha fazla okuyabileceğim herhangi bir referans var mı? IEBlog'u inceledim, ancak hiçbir şey bulamadık - ne de event.target'teki MSDN sayfası bundan bahsetmiyor. "onclick" 'in "yanlış" olduğunu söyleyen orijinal açıklamayı bulmak istiyorum. –

+0

Şey ... Üzgünüm, size herhangi bir referans gösteremem ama IE9'u kullanarak bunu öğrendim, ve çalışıyor ... 'onclick' yanlış değil, IE9'da Sadece eski IE sürümlerinde olduğu gibi davranmak için ayrılmış. – Teemu

+0

@Teemu: jQuery'de aynı şeyi yapabilir miyim? – Hitesh

12

event.target?

var target = event.target ? event.target : event.srcElement; 

noktayı eksik olabilir .. bunun üzerine kontrol etmek ve bir değişkene o atayabilir ve bunun yerine kullanmak gerekir mi ... Eğer IE9 event.target kullanmak istiyorsanız

+0

IE (9) 'event.target'ı desteklediğinden,' event.target 'işlevini kullanmayı umuyordum, ancak ben herhangi bir 'event.target'ı göremiyorum. –

+0

Tam olarak ihtiyacım olan şey, teşekkürler. – Esger

-2

kullanım: o zaman

var target = (event.target !== undefined)? event.target.name : event.srcElement.tagName; 

:

if (target === 'A' || target === '...') { 
    ... 
} 

VEYA: basit kullanım:

var target = event.srcElement.tagName; 

İşte Chrome 35 :)

+2

Lütfen soruyu okuyun, açıkça bahseder ** IE9 ** – Tyblitz

2

test Soruşturmam için de geçerli (t IE9, IE10 & IE11 kenarı tarayıcı modları, IE8 ne yazık ki jsFiddle keser). IE9 modunda (IE11) event.target, işlev için yerel bir değişken olarak kullanılabilir, gerçek IE9'dan farklı olup olmadığını bilmeyin.

Satır içi işlevi olan herhangi bir tarayıcıda event erişemezsiniz. Buradaki sorun

<element onclick="someFunc(this)"> 

yapmak ve, this === event.target (veya srcElement), parametre olarak this bir [Event Object] yani [HTML Object] değil geçerken.

// note that onclick perfectly works, you don't necessarily need addEventListener 
document.getElementById('foo').onclick = function(e) { alert(e.target) } //or 
document.getElementById('foo').addEventListener('click', function(e) { alert(e.target) }, false); 

Yani size erişim etkinliği hedef ya doğrudan inline parametre olarak, ya olduğu JavaScript kullanılarak nesne parametresi en:

<div id="foo" onclick="alert(this)"></div> 

aynıdır:

Yani pratikte bu demektir target || srcElement özelliği. Burada sonuçları kendiniz test edebilirsiniz: http://jsfiddle.net/kevinvanlierde/tg6FP/2/

Not: durumda satır içi, komut dosyalarınızın pozisyon
Not (sağ vücut etiketi kapatmadan önce) çok önemlidir takmak: durumunda Satır içi takmak event.target'un iletilen nesnenin 'kök' olması durumunda, event.type gibi diğer etkinlik özelliklerine erişemezsiniz.
Not: IE Developer mode konusunda dikkatli olun. Aldatıcı olduğunu biliyordum (örneğin, 'HTML olarak düzenle'yi tıklayana kadar öğenin ağacında DOM içeriğinin doğru görüntülenmemesi gerekir)

0

Buradaki sorun, addEventListener() (eski okuldan dolayı kullanmadığınız) değildi .onclick -assassment de çalışır). Sorun, divClick'un this (eventobj.target'a eşittir) olduğunu, ancak tüm eventobj olmasını istiyorsunuz.

Aşağıdaki iki durumda this adı altında yalnızca eventobj.target alırsınız ve onclick-işleyicisine iletilen argümanlara erişiminiz yoktur.

document.getElementById("xyz").onclick = divClick; 

Bu olay IE9 + ve diğer tarayıcılarda xyz elemanı üzerine başlatılan nasıl:

document.getElementById("xyz").onclick(eventobj) 
1
<div id=xyz onclick="divClick(this);"> 
document.getElementById("xyz").onclick = function() { divClick(this); }; 

aşağıdaki satır ile normal bir parametre olarak tüm eventobj olsun

Bunu arşivlemenin kolay yolu şu yolu kullanarakdır:

var target = event.target || event.srcElement; 
  • Üçlü operatör kullanmaktan kaçının.

    1. Testi event.target eğer yanlış olarak değerlendirmek olacağını tarayıcıda yoksa bir truthy çünkü: bu işleri

yoludur.

  • Eğer false olarak değerlendirilirse, bu durumda event.srcElement olan sonraki operatöre gider.
  • Ve bununla birlikte, kodun yürütüldüğü geçerli tarayıcıda bulunan ilk değerle sonlanacaksınız.