| <p>This test tabs between lots of elements, printing out the events you see along the way.</p> |
| <hr> |
| <div id="testDiv"></div> |
| <iframe id="testIframe" style="width: 800; height: 125; margin-top: 10px; border: 2px solid black"></iframe> |
| <pre id="console"></pre> |
| |
| <script> |
| |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| function log(s) |
| { |
| document.getElementById('console').appendChild(document.createTextNode(s)); |
| } |
| |
| function description(element) |
| { |
| var inputType = element.getAttribute('type'); |
| if (inputType) |
| return inputType; |
| |
| if (element.toString().match(/iframe/i)) |
| return "IFRAME"; |
| |
| if (element.toString().match(/javascript:/i)) |
| return "ANCHOR"; |
| |
| if (element.toString().match(/textarea/i)) |
| return "TEXTAREA"; |
| |
| if (element.toString().match(/div/i)) |
| return "DIV"; |
| |
| return element.toString(); |
| } |
| |
| function keydownListener(event) |
| { |
| log("keydown event: [to] " + description(event.target) + "\n"); |
| } |
| |
| function blurListener(event) |
| { |
| log("blur event: [to] " + description(event.target) + "\n"); |
| } |
| |
| var lastFocusedElement = null; |
| function focusListener(event) |
| { |
| log('focus event: [to] ' + description(event.target) + '\n'); |
| lastFocusedElement = event.target; |
| } |
| |
| function addEventListeners(element) |
| { |
| element.addEventListener('keydown', keydownListener, false); |
| element.addEventListener('focus', focusListener, false); |
| element.addEventListener('blur', blurListener, false); |
| } |
| |
| function addElements(parentElement) |
| { |
| var inputTypes = [ |
| "BUTTON", |
| "CHECKBOX", |
| "FILE", |
| "HIDDEN", |
| "IMAGE", |
| "ISINDEX", |
| "PASSWORD", |
| "RADIO", |
| "RANGE", |
| "RESET", |
| "SEARCH", |
| "SUBMIT", |
| "TEXT" |
| ]; |
| |
| // Form elements |
| for (var i = 0; i < inputTypes.length; ++i) { //> |
| var input = parentElement.ownerDocument.createElement('input'); |
| input.type = inputTypes[i]; |
| addEventListeners(input); |
| parentElement.appendChild(input); |
| } |
| |
| // Textarea |
| var textarea = parentElement.ownerDocument.createElement('textarea'); |
| addEventListeners(textarea); |
| parentElement.appendChild(textarea); |
| |
| // Contenteditable |
| var div = parentElement.ownerDocument.createElement('div'); |
| div.contentEditable = true; |
| div.style.border = "1px solid black"; |
| addEventListeners(div); |
| parentElement.appendChild(div); |
| |
| // Anchor |
| var anchor = parentElement.ownerDocument.createElement('a'); |
| anchor.innerHTML = "anchor"; |
| anchor.href = "javascript:"; |
| addEventListeners(anchor); |
| parentElement.appendChild(anchor); |
| } |
| |
| function dispatchOptionTab(element, shiftKey) |
| { |
| var event = document.createEvent("KeyboardEvents"); |
| var tabKeyIdentifier = "U+0009"; |
| event.initKeyboardEvent("keydown", true, true, document.defaultView, tabKeyIdentifier, 0, false, true, shiftKey, false, false); |
| element.dispatchEvent(event); |
| } |
| |
| function setup() |
| { |
| var testDiv = document.getElementById('testDiv'); |
| addElements(testDiv); |
| |
| var testIframe = document.getElementById('testIframe'); |
| addElements(testIframe.contentDocument.body); |
| addEventListeners(testIframe); |
| } |
| |
| setup(); |
| |
| log('PARENT DOCUMENT:\n'); |
| document.getElementsByTagName('input')[0].focus(); |
| for (var i = 0; i < 14; ++i) //> |
| dispatchOptionTab(lastFocusedElement, false); |
| |
| lastFocusedElement.blur(); |
| |
| log('\nIFRAME DOCUMENT:\n'); |
| document.getElementById('testIframe').contentDocument.getElementsByTagName('input')[0].focus(); |
| for (var i = 0; i < 14; ++i) //> |
| dispatchOptionTab(lastFocusedElement, false); |
| </script> |