7

आप Internet Explorer में इस प्रयास करते हैं तो आप देख सकते हैं कि भेजा घटना बुदबुदाती दौरान अद्वितीय नहीं है:यदि चेक एक समारोह में पुनर्लक्ष्यीकरण घटना के दौरान एक और के समान है पुराने Internet Explorer

var x; 
myinnerdiv.onclick = function() { x = window.event; }; 
myparentdiv.onclick = function() { alert(x === window.event); }; 
// false, but should be the same! 

बराबर standards- का उपयोग करना आधारित विधि:

var x; 
myinnerdiv.onclick = function(ev) { x = ev; }; 
myparentdiv.onclick = function(ev) { alert(x === ev); }; 
// true: same event, retargeted 

क्या कार्यक्षमता की कमी के आसपास काम करने के लिए कोड में किसी ईवेंट को विशिष्ट रूप से पहचानने का कोई तरीका है?

+0

यह एक वस्तु है, यदि आप इसे का विस्तार करना चाहते हैं, तो बस करो: 'ev.mySuperSpecialInfo = 42;'। इससे भी बेहतर, राज्य को स्टोर करने के लिए अपने सिस्टम का उपयोग करें। 'var eventState = 'पहुंचे माता-पिता';' – davin

+0

जैसा कि मैंने कहा था ev.mySuperSpecialInfo myparentdiv में प्रेषित नहीं है, क्योंकि वे दो पूरी तरह से अलग ऑब्जेक्ट्स हैं –

+0

मैंने सोचा कि आप दूसरे संस्करण का उपयोग कर रहे हैं? अगर नहीं, तो भी आपको करना चाहिए। – davin

उत्तर

11

window.event डेटा मूल्य नहीं है लेकिन ईवेंट ऑब्जेक्ट्स बनाने के लिए गेटर फ़ंक्शन है। डीओएम गुणों के अधिकांश की तरह डेटा मान नहीं बल्कि एक्सेसर फ़ंक्शंस हैं। वैसे भी

div.onclick = function() { 
    var a = window.event; 
    var b = window.event; 
    alert(a === b) // false 
}; 

, बस अपने खुद के कार्य करना:

तुम भी उन्हें अगले एक दूसरे के लिए क्या कर सकते हैं

window.getEvent = (function() { 
    var e = {}; 

    return function() { 
     var cur = window.event; 
     if(cur.type === e.type && 
      cur.srcElement === e.srcElement && 
      cur.clientX === e.clientX && 
      cur.clientY === e.clientY && 
      cur.keyCode === e.keyCode) { 
      return e.evt; 
     } 
     e.type = cur.type; 
     e.srcElement = cur.srcElement; 
     e.clientX = cur.clientX; 
     e.clientY = cur.clientY; 
     e.keyCode = cur.keyCode; 
     e.evt = cur; 
     return cur; 
    }; 
})(); 

myinnerdiv.onclick = function() { 
    var event = getEvent(); 
    event.myCustomProp = 3; 
}; 
myparentdiv.onclick = function() { 
    var event = getEvent(); 
    alert(event.myCustomProp === 3); 
}; 

यह मानता है कि इन 5 मूल्यों को देखने के लिए पर्याप्त हैं अगर घटना वस्तुओं एक ही घटना का प्रतिनिधित्व करें, जो मुझे उचित लगता है।

Test page here, संक्षेप में, पाठ 'asd' (लाल रंग) पर क्लिक करें रूप में एचटीएमएल है:

<div id="myparentdiv"> 
    daa 
    <div id="myinnerdiv">asd</div> 
    daa 
</div> 

आप तो बस jQuery का उपयोग कुछ है कि यकीन है कि के लिए काम करता चाहते हैं, आप मूल रूप से एक पूरे बनाने के लिए स्क्रैच से इवेंट मॉडल इसे और अधिक साफ करने के लिए (और हमेशा उस ईवेंट मॉडल के एपीआई का उपयोग करें)।

1
एक आसान तरीका

: सिर्फ तुलना event1.timeStamp और event2.timeStamp

+1

यह आसान नहीं होगा अगर यह आईई 6- 8 क्योंकि 2 अलग-अलग घटनाओं में आसानी से एक ही टाइमस्टैम्प हो सकता है। – Esailija

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

  • कोई संबंधित समस्या नहीं^_^