123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <!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>
|