6
A
回答
3
我不相信有一個可靠的方法來確定一個給定的對象是否是不是一個DOM事件。
typeof e
將始終爲真正的事件對象,這是沒有幫助的回報'object'
。- 您可能在對象上檢查的任何屬性都可以存在於真正的Event對象或任何非Event對象中。
- 您可能認爲原型鏈可以用於確定此問題,但它具有與#2相同的問題(可以輕鬆複製)。
- 的
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
上指定屬性,因爲這些顯然很容易被欺騙。
+0
感謝您的徹底解答。我將其標記爲已接受。 –
0
也許如果事件通過DOM起泡event.bubbles
它是DOM事件。 但即使該聲明是真實的,其傳播可能會停止。
修訂:
確定你正在尋找的屬性是e.target
和IE e.srcElement
。 這兩個屬性都返回發生事件的HTML元素,並將其定義爲 DOM事件。
但也許你應該指定你解釋爲DOM事件。 你的意思是瀏覽器的原生事件,因爲這是DOM事件太:
var zoo = jQuery('#zoo');
zoo.bind('moo');
zoo.trigger('moo');
它綁定到
-1
jQuery中我創建了一個測試功能,像這樣一個DOM節點:
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而不是觸發器更安全。
相關問題
- 1. 測試對象是否爲DOM元素
- 2. 你如何測試對象是否是另一個對象
- 3. 測試一個對象是否是一個字符串
- 4. 如何測試一個Python對象是否是一個模塊?
- 5. 測試兩個對象是否相等
- 6. 測試一個對象,並確定它是否是類x
- 7. 如何測試一個變量是否是Moment.js對象?
- 8. 測試一個對象是否實現了一個接口
- 9. 一個Java方法,看看是否是一個dom樹對象的另一個dom樹對象的子集
- 10. 測試一個對象是否是AngularJS模板中的空對象
- 11. cocoa touch - 測試對象是否是客觀的C對象
- 12. 測試一個對象是不是一個類型
- 13. 什麼是正確/正確的方式來測試一個對象是否是一個JavaScript中的jQuery對象?
- 14. 測試一個文件是否加載
- 15. 測試對象是否存在?
- 16. 測試對象是否已釋放
- 17. 測試對象是否實現接口
- 18. 測試python對象是否有效
- 19. 測試對象是否未被刪除
- 20. 測試ActiveSupport :: TimeWithZone對象是否相等
- 21. iphone - 測試對象是否存在
- 22. Python測試是否存在對象
- 23. 從對象測試事件
- 24. 如何測試是否用rspec創建了一個對象?
- 25. 如何測試一個對象是否在Delphi中被釋放
- 26. 如何測試一個圓是否在旋轉的對象中
- 27. 是否可以編寫一個可以測試AuthorizationPolicy對象的測試?
- 28. VB.Net事件:測試發件人是否是另一個子或功能
- 29. 測試一個對象是一個或另一個實例
- 30. 是否可以在常規對象(不是DOM)上分派事件?
如何調用'eventHandler'? –
@TravisJ是不是真的有意義呢?問題是我們如何測試'e'是否是DOM事件。 – Shmiddty
@Shmiddty - 我明白了,我想我誤解了這個問題。 –