<!DOCTYPE html> <html> <!-- Copyright 2010 The Closure Library Authors. All Rights Reserved. Use of this source code is governed by the Apache License, Version 2.0. See the COPYING file for details. --> <head> <title>goog.events.KeyHandler</title> <link rel="stylesheet" href="css/demo.css"> <style> .input-group { border: 1px solid black; clear: both; float: left; margin-bottom: 1em; padding: 1em; } #console { position: fixed; right: 0; top: 0; left: 400px; bottom: 0; overflow: auto; } #no-tab { background: pink; } </style> <script src="../base.js"></script> <script> goog.require('goog.debug.DivConsole'); goog.require('goog.events'); goog.require('goog.events.KeyCodes'); goog.require('goog.events.KeyHandler'); goog.require('goog.log'); </script> </head> <body> <h1>goog.events.KeyHandler</h1> <p><button onclick="divConsole.clear()">Clear Console</button></p> <div class="input-group"> <label>Plain input <input></label><br> <label>Number input <input class="number-input"></label><br> <label>Text area <textarea></textarea></label><br> <div tabIndex="0">Focusable div</div> </div> <div id="no-tab" class="input-group"> No Tab inside this<br><br> <label>Plain input <input></label><br> <label>Number input <input class="number-input"></label><br> <label>Text area <textarea></textarea></label><br> <div tabIndex="0">Focusable div</div> </div> <div id="console"></div> <script> var divConsole = new goog.debug.DivConsole(document.getElementById('console')); divConsole.setCapturing(true); var logger = new goog.log.getLogger('demo'); var docKh = new goog.events.KeyHandler(document); goog.events.listen(docKh, 'key', function(e) { goog.log.info(logger, 'keyCode: ' + e.keyCode + ', charCode: ' + e.charCode + ', repeat: ' + e.repeat + ', target: ' + e.target + ', native event: ' + e.getBrowserEvent().type); }); var noTabKh = new goog.events.KeyHandler(document.getElementById('no-tab')); goog.events.listen(noTabKh, goog.events.KeyHandler.EventType.KEY, function(e) { if (e.keyCode == goog.events.KeyCodes.TAB) { e.preventDefault(); } }); function numberInputKeyHandler(e) { goog.log.info(logger, 'isTextModifyingKeyEvent: ' + goog.events.KeyCodes.isTextModifyingKeyEvent(e)); if (e.target.className != 'number-input' || e.ctrlKey || !e.shiftKey && e.keyCode >= goog.events.KeyCodes.ZERO && e.keyCode <= goog.events.KeyCodes.NINE || !goog.events.KeyCodes.isTextModifyingKeyEvent(e)) { return; } switch (e.keyCode) { // Allow these case goog.events.KeyCodes.DELETE: case goog.events.KeyCodes.BACKSPACE: case goog.events.KeyCodes.TAB: return; } // prevent default for the rest e.preventDefault(); } goog.events.listen(docKh, goog.events.KeyHandler.EventType.KEY, numberInputKeyHandler); </script> </body> </html>