2012-05-18 18 views
10

एचटीएमएल डॉम ऑब्जेक्ट मॉडल Event ऑब्जेक्ट with a target property परिभाषित करता है।आईई 9 में Event.target तक कैसे पहुंचे?

एमएसडीएन में देखकर, माइक्रोसॉफ्ट target property दस्तावेज करता है। उन्होंने यह भी इंटरनेट एक्सप्लोरर के पूर्व संस्करणों से target के उपनाम के रूप srcElement दस्तावेज़:

लक्ष्य संपत्ति विंडोज इंटरनेट एक्सप्लोरर 8 और पिछले संस्करणों में srcElement के समान है।


तो यहाँ मैं इंटरनेट एक्सप्लोरर में हूँ, एक click ब्रेकप्वाइंट पर बैठे:

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

function divClick(sender) 
{ 
    var divCell = sender; 

और F12 उपकरण पर सांत्वना मैं वैश्विक event वस्तु के लिए पूछ सकते हैं:

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

और मैंके लिए पूछ सकता हूं 0 वस्तु:

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

लेकिन event.target खाली है:

>> event.target 

और अगर मैंevent घड़ी , वहाँ कोई target संपत्ति है:

enter image description here

मैं कैसे उपयोग करते हैं तोकी संपत्ति इंटरनेट एक्सप्लोरर मेंऑब्जेक्ट (9 (दस्तावेज़ मोड: आईई 9 मानक (ब्राउज़र मोड: आईई 9)))?

+0

क्या आपने jQuery जैसी लाइब्रेरी को आपके लिए गंदे काम करने पर विचार किया है? – ThiefMaster

उत्तर

4

आप IE9 में event.target उपयोग करना चाहते हैं , आपको तत्व को eventhandler असाइन करने के लिए addEventListener() -method का उपयोग करने की आवश्यकता होगी।

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

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

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

divClick() में आप केवल कीवर्ड this का उपयोग कर day उल्लेख कर सकते हैं। तर्क e में ईवेंट-ऑब्जेक्ट का संदर्भ शामिल है।

बीएसडब्ल्यू, एमएसडीएन में आप विंडोज विकास के बजाय Web development के लिए शायद अधिक उपयुक्त आईई-दस्तावेज पा सकते हैं।

+0

* "यदि आप 'event.target' का उपयोग करना चाहते हैं तो IE9 है, तो आपको' addEventListener()' "का उपयोग करने की आवश्यकता होगी * * क्या इस पर कोई संदर्भ है कि मैं और अधिक पढ़ सकता हूं? मैंने आईईब्लॉग को खराब कर दिया है, लेकिन इसका कोई उल्लेख नहीं मिल सकता है - न ही 'event.target' पर एमएसडीएन पृष्ठ का उल्लेख है। मैं मूल विवरण ढूंढना चाहता हूं जो कहता है कि 'ऑनक्लिक' असाइन करना गलत है। –

+0

खैर ... मुझे खेद है, मैं आपको कोई सटीक संदर्भ नहीं बता सकता, लेकिन यह है कि मैंने इसका उपयोग करके आईई 9 के बारे में सीखा है, और यह काम करता है ... 'ऑनक्लिक' गलत नहीं है, लेकिन आईई 9 में यह बस पुराने आईई संस्करणों की तरह कार्य करने के लिए आरक्षित है। – Teemu

+0

@Teemu: क्या मैं इसे jQuery में प्राप्त कर सकता हूं ?? – Hitesh

12

event.target?

.. आप उस पर जाँच करें और एक चर है कि निर्दिष्ट करेंगे और इसके बजाय उसका उपयोग करने की आवश्यकता है

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

बात को अनदेखा कर रहा हो सकता है ...

+0

चूंकि आईई (9) कहता है कि यह 'event.target' का समर्थन करता है, मैं (event)' event.target' का उपयोग करने की उम्मीद कर रहा था, लेकिन मैं * किसी भी 'event.target' को नहीं देखता हूं। –

+0

बिल्कुल मुझे क्या चाहिए, धन्यवाद। – Esger

-2

उपयोग:

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

तो:

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

या: सरल उपयोग:

var target = event.srcElement.tagName; 

यहां Chrome 35 पर परीक्षण किया :)

+2

काम करता है कृपया प्रश्न पढ़ें, यह स्पष्ट रूप से उल्लेख करता है ** आईई 9 ** – Tyblitz

2

मेरी जांच के लिए चला जाता है (टी आईई 9, आईई 10 & आईई 11 पर ब्राउज़र मोड एज, आईई 8 दुर्भाग्य से जेएसफ़िल्ड तोड़ता है)। IE9 मोड (IE11) event.target में स्थानीय चर के रूप में फ़ंक्शन में उपलब्ध था, यह नहीं पता कि यह वास्तविक IE9 से अलग है या नहीं।

आप इनलाइन फ़ंक्शन वाले किसी भी ब्राउज़र में event तक नहीं पहुंच सकते हैं। समस्या यह है कि आप

<element onclick="someFunc(this)"> 

करते हैं और आपको पैरामीटर के रूप में this गुजरती हैं, this === event.target (या srcElement), अर्थात् एक [HTML Object], न कि एक [Event Object] जब।

तो व्यवहार में इसका मतलब है कि यह:

// 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); 

तो तुम पहुँच घटना लक्ष्य या तो सीधे इनलाइन पैरामीटर के रूप में, या तो के रूप में जावास्क्रिप्ट के माध्यम से वस्तु पैरामीटर का:

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

रूप में ही है target || srcElement संपत्ति। आप यहाँ खुद के लिए परिणामों का परीक्षण कर सकते हैं: http://jsfiddle.net/kevinvanlierde/tg6FP/2/

नोट: मामले में आप देते हैं इनलाइन, अपनी स्क्रिप्ट की स्थिति महत्वपूर्ण
नोट (सही बॉडी टैग बंद करने से पहले) है: मामले में आप इनलाइन देते हैं , दिया गया है कि event.target पारित वस्तु का 'मूल' है, आप event.type जैसे अन्य ईवेंट गुणों तक नहीं पहुंच सकते हैं।
नोट: आईई डेवलपर मोड से सावधान रहें। मैंने इसे धोखा देने के लिए जाना है (उदाहरण के लिए, जब तक आप 'HTML के रूप में संपादित करें' पर क्लिक नहीं करते हैं, तब तक तत्व पेड़ में सही ढंग से प्रदर्शित नहीं किया जाता है)

0

समस्या यह नहीं थी कि आपने addEventListener() का उपयोग नहीं किया (क्योंकि पुराना स्कूल .onclick - असाइनमेंट भी काम करता है)। समस्या यह थी कि divClick को this मिला (जो eventobj.target के बराबर है), लेकिन आप पूरे eventobj चाहते हैं।

निम्नलिखित दो मामलों में आपको केवल eventobj.targetthis के नाम पर मिलता है और आपके पास ऑनक्लिक-हैंडलर को दिए गए तर्कों तक कोई पहुंच नहीं है।

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

इस तरह एक घटना IE9 + और अन्य ब्राउज़र में xyz तत्व पर शुरू किया गया है::

document.getElementById("xyz").onclick(eventobj) 
1

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

आप निम्न पंक्ति के साथ सामान्य पैरामीटर के रूप में पूरे eventobj मिल

इसका संग्रह करने का आसान तरीका उपयोग कर रहा है:

var target = event.target || event.srcElement; 
  • एक टर्नरी ऑपरेटर का उपयोग करने से बचें।

    1. टेस्ट अगर event.target एक truthy जो करता है, तो है कि ब्राउज़र गलत पर मूल्यांकन करेंगे में मौजूद नहीं है:

तरीका यह काम करता है क्योंकि है।

  • यदि झूठे का मूल्यांकन किया जाता है तो यह अगले ऑपरेटर में जाएगा जो इस मामले में event.srcElement है।
  • और इसके साथ आप वर्तमान ब्राउज़र पर मौजूद पहले मान के साथ समाप्त हो जाएंगे जहां कोड निष्पादित किया गया है।

    संबंधित मुद्दे