/*! { "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; }); });