तरहपरीक्षण करें कि एक वस्तु एक डोम घटना
function eventHandler(e) {
// ...
}
एक समारोह के भीतर से है यह तय करने के लिए कि क्या e
एक डोम घटना है एक विश्वसनीय और कारगर तरीका है?
तरहपरीक्षण करें कि एक वस्तु एक डोम घटना
function eventHandler(e) {
// ...
}
एक समारोह के भीतर से है यह तय करने के लिए कि क्या e
एक डोम घटना है एक विश्वसनीय और कारगर तरीका है?
मुझे विश्वास नहीं है कि यह निर्धारित करने का एक विश्वसनीय तरीका है कि कोई दिया गया ऑब्जेक्ट कोई DOM ईवेंट नहीं है।
typeof e
हमेशा वास्तविक घटना वस्तुओं, जो उपयोगी नहीं है के लिए 'object'
वापस आ जाएगी।contructor
संपत्ति होनहार लग सकता है लेकिन एक ऐसा कर सकता है:function DummyEvent(){
this.constructor.toString = function(){
return "function MouseEvent() { [native code] }";
}
}
यह बनाने console.log(e.constructor)
प्रिंट "function MouseEvent() { [native code] }"
तो समाप्त होता है, वहाँ एक "विश्वसनीय" जिस तरह से करता है, तो यह बताने के लिए है एक वस्तु एक घटना है? नहीं।
संपादित करें — ध्यान दें कि यदि आप ईवेंट स्पूफिंग को रोकना चाहते हैं तो यह सब अप्रासंगिक है क्योंकि आप वास्तविक घटनाओं को आसानी से बना सकते हैं।
var evt = new Event('click');
var evt2 = document.createEvent('MouseEvents');
evt2.initMouseEvent('click', ...);
//etc
EDIT2 — मैं एक परीक्षण jsFiddle बना लिया है किसी तरह की वस्तुओं को अलग करने के खोजने की कोशिश, लेकिन मैं अभी तक कुछ भी निश्चित नहीं मिली है। ध्यान दें कि मैंने DummyEvent
पर गुण निर्दिष्ट करने के लिए परेशान नहीं किया क्योंकि उनको आसानी से आसानी से धोखा दिया जा सकता है।
पूरी तरह से जवाब के लिए धन्यवाद। मैं इसे स्वीकार्य के रूप में चिह्नित कर रहा हूं। –
शायद अगर घटना डीओएम के माध्यम से event.bubbles
बुलबुले हो तो यह डोम घटना है। लेकिन अगर यह कथन सत्य है तो भी इसका प्रचार बंद हो सकता है।
UPDATED:
ठीक संपत्ति आप देख रहे हैं e.target
है और IE e.srcElement
के लिए। दोनों गुण एचटीएमएल तत्व को वापस करते हैं जिस पर घटना होती है जिस पर इसे डीओएम ईवेंट के रूप में परिभाषित किया जाता है।
हालांकि शायद आपको यह निर्दिष्ट करना चाहिए कि आप डीओएम घटना के रूप में क्या व्याख्या करते हैं। आप ब्राउज़र की देशी घटनाओं मतलब है, क्योंकि यह भी डोम घटना है:
var zoo = jQuery('#zoo');
zoo.bind('moo');
zoo.trigger('moo');
यह एक डोम नोड
jQuery में मैं एक परीक्षण समारोह, कुछ इस तरह बनाया से आबद्ध है:
function isEvent(e) {
try {
e.PreventDefault();
return true;
}
catch (err) {
return false;
}
}
और परीक्षण कोड:
var o = new Object();
var e = $.Event('click');
alert(isEvent(o));
alert(isEvent(e));
पूर्व चेतावनी झूठी दिखाती है, जबकि बाद वाला सच दिखाता है। fiddle देखें।
अपडेट: ट्रिगर के बजाय preventDefault जैसे कुछ कॉल करना सुरक्षित है।
'eventHandler' कैसे कहा जा रहा है? –
@TravisJ जो वास्तव में प्रासंगिक नहीं है? प्रश्न यह है कि हम कैसे जांच कर सकते हैं कि 'e' एक डोम घटना है या नहीं। – Shmiddty
@Shmiddty - मुझे लगता है, मुझे लगता है कि मैंने इस सवाल को गलत समझा था। –