welsonjs/node_modules/modernizr/feature-detects/event/oninput.js

60 lines
1.9 KiB
JavaScript

/*!
{
"name": "onInput Event",
"property": "oninput",
"notes": [{
"name": "MDN Docs",
"href": "https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.oninput"
}, {
"name": "WHATWG Spec",
"href": "https://html.spec.whatwg.org/multipage/input.html#common-input-element-attributes"
}, {
"name": "Related Github Issue",
"href": "https://github.com/Modernizr/Modernizr/issues/210"
}],
"authors": ["Patrick Kettner"],
"tags": ["event"]
}
!*/
/* DOC
`oninput` tests if the browser is able to detect the input event
*/
define(['Modernizr', 'docElement', 'createElement', 'testStyles', 'hasEvent'], function(Modernizr, docElement, createElement, testStyles, hasEvent) {
Modernizr.addTest('oninput', function() {
var input = createElement('input');
var supportsOnInput;
input.setAttribute('oninput', 'return');
input.style.cssText = 'position:fixed;top:0;';
if (hasEvent('oninput', docElement) || typeof input.oninput === 'function') {
return true;
}
// IE doesn't support onInput, so we wrap up the non IE APIs
// (createEvent, addEventListener) in a try catch, rather than test for
// their trident equivalent.
try {
// Older Firefox didn't map oninput attribute to oninput property
var testEvent = document.createEvent('KeyboardEvent');
supportsOnInput = false;
var handler = function(e) {
supportsOnInput = true;
e.preventDefault();
e.stopPropagation();
};
testEvent.initKeyEvent('keypress', true, true, window, false, false, false, false, 0, 'e'.charCodeAt(0));
docElement.appendChild(input);
input.addEventListener('input', handler, false);
input.focus();
input.dispatchEvent(testEvent);
input.removeEventListener('input', handler, false);
docElement.removeChild(input);
} catch (e) {
supportsOnInput = false;
}
return supportsOnInput;
});
});