function isEventSupported(eventName, element) {
element = element || document.createElement(TAGNAMES[eventName] || 'div');
eventName = 'on' + eventName;
var isSupported = (eventName in element);
if (!isSupported) {
// if it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
if (!element.setAttribute) {
element = document.createElement('div');
}
if (element.setAttribute && element.removeAttribute) {
element.setAttribute(eventName, '');
isSupported = typeof element[eventName] == 'function';
// if property was created, "remove it" (by setting value to `undefined`)
if (typeof element[eventName] != 'undefined') {
element[eventName] = undef;
}
element.removeAttribute(eventName);
}
}
element = null;
return isSupported;
}
Mouse events:
click: true
dblclick: true
mousedown: true
mouseup: true
mouseover: true
mousemove: true
mouseout: true
mousewheel: true
Key events:
keypress: true
keydown: true
keyup: true
HTML events
load: true
unload: true
abort: true
error: true
View events
resize: true
orientationchange: false
scroll: true
Form events:
submit: true
reset: true
Form controls' events:
select: true
change: true
Activation events:
focus: true
blur: true
MSHTML DOM events:
cut: true
copy: true
paste: true
beforecut: true
beforecopy: true
beforepaste: true
afterupdate: false
beforeupdate: false
cellchange: false
dataavailable: false
datasetchanged: false
datasetcomplete: false
errorupdate: false
rowenter: false
rowexit: false
rowsdelete: false
drag: true
dragstart: true
dragenter: true
dragover: true
dragleave: true
dragend: true
drop: true
selectstart: true
mouseenter: true
mouseleave: true
activate: false
beforeactivate: false
deactivate: false
beforedeactivate: false
focusin: false
focusout: false
stop: false
readystatechange: false
beforeprint: true
afterprint: true
beforeunload: true
Unexistent (most likely) events:
click2: false
foobarbaz: false
Unexistent in Opera <=10a
contextmenu: true
iPhone touch/gesture events
touchstart: false
touchend: false
touchmove: false
touchcancel: false
gesturestart: false
gesturechange: false
gestureend: false
HTML5 events
hashchange: true
online: true
offline: true
message: true
undo: false
redo: false
storage: true
popstate: true
canplay: true
seeking: true
seekend: false
Proprietary
pageshow: true
pagehide: true
onbeforescriptexecute: false
onafterscriptexecute: false