- Notifications
You must be signed in to change notification settings - Fork 722
Setup
Sections: Page Head | CSS | HTML | Script
Extensions: AltKeysPopup | Autocomplete | Caret | Extender | Preview Keyset | Mobile | Navigation | Scramble | Typing
<!-- jQuery --> <script src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <!-- jQuery UI theme or Bootstrap (optional, if you create a custom theme) --> <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/themes/ui-lightness/jquery-ui.css" rel="stylesheet"> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- jQuery UI position utility (optional, if you position the keyboard yourself) --> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script> <!-- keyboard widget css & script --> <link href="css/keyboard.css" rel="stylesheet"> <script src="js/jquery.keyboard.js"></script> <!-- css for the preview keyset extension --> <link href="css/keyboard-previewkeyset.css" rel="stylesheet"> <!-- keyboard optional extensions - include ALL (includes mousewheel) --> <script src="js/jquery.keyboard.extension-all.js"></script> <!-- or include individual extensions, as desired --> <!-- <script src="js/jquery.mousewheel.js"></script> <script src="js/jquery.keyboard.extension-altkeypopup.js"></script> <script src="js/jquery.keyboard.extension-autocomplete.js"></script> <script src="js/jquery.keyboard.extension-caret.js"></script> <script src="js/jquery.keyboard.extension-extender.js"></script> <script src="js/jquery.keyboard.extension-mobile.js"></script> <script src="js/jquery.keyboard.extension-navigation.js"></script> <script src="js/jquery.keyboard.extension-previewkeyset.js"></script> <script src="js/jquery.keyboard.extension-scramble.js"></script> <script src="js/jquery.keyboard.extension-typing.js"></script> -->Snippet from the keyboard.css file
/* keyboard - jQuery UI Widget */ .ui-keyboard { padding: .3em; position: absolute; left: 0; top: 0; z-index: 16000; } .ui-keyboard-has-focus { z-index: 16001; } .ui-keyboard div { font-size: 1.1em; } .ui-keyboard-button { height: 2em; min-width: 2em; margin: .1em; cursor: pointer; overflow: hidden; line-height: 2em; -moz-user-focus: ignore; } .ui-keyboard-button span { padding: 0; margin: 0; white-space:nowrap; display: inline-block; } .ui-keyboard-button-endrow { clear: left; } .ui-keyboard-space { width: 15em; } .ui-keyboard-space span, .ui-keyboard-empty span { font: 0/0 a; text-shadow: none; color: transparent; } /* see http://nicolasgallagher.com/another-css-image-replacement-technique/ */ .ui-keyboard-preview-wrapper { text-align: center; } .ui-keyboard-preview { text-align: left; margin: 0 0 3px 0; display: inline; width: 99%;} /* width is calculated in IE, since 99% = 99% full browser width =( */ .ui-keyboard-keyset { text-align: center; white-space: nowrap; } .ui-keyboard-input { text-align: left; } .ui-keyboard-input-current { -moz-box-shadow: 1px 1px 10px #00f; -webkit-box-shadow: 1px 1px 10px #00f; box-shadow: 1px 1px 10px #00f; } .ui-keyboard-placeholder { color: #888; } .ui-keyboard-nokeyboard { color: #888; border-color: #888; } /* disabled or readonly inputs, or use input[disabled='disabled'] { color: #f00; } */ .ui-keyboard-spacer { display: inline-block; width: 1px; height: 0; cursor: default; } .ui-keyboard-input.light, .ui-keyboard-preview.light { color: #222; background: #ddd; } .ui-keyboard-input.dark, .ui-keyboard-preview.dark { color: #ddd; background: #222; } /* combo key styling - toggles diacritics on/off */ .ui-keyboard-button.ui-keyboard-combo.ui-state-default { border-color: #ffaf0f; } /* (in)valid inputs */ button.ui-keyboard-accept.ui-keyboard-valid-input { border-color: #0c0; background: #080; color: #fff; } button.ui-keyboard-accept.ui-keyboard-valid-input:hover { background: #0a0; } button.ui-keyboard-accept.ui-keyboard-invalid-input { border-color: #c00; background: #800; color: #fff; opacity: 0.5; filter: alpha(opacity=50); } button.ui-keyboard-accept.ui-keyboard-invalid-input:hover { background: #a00; } /*** Caret extension definition ***/ /* margin-top => is added to the caret height (top & bottom) */ .ui-keyboard-caret { background: #c00; width: 1px; margin-top: 3px; } /* jQuery Mobile specific definitions * Toggle button image definitions * Extender button image * Media queries can be found in the keyboard.css file, * but are not included here */The placeholder attribute adds a watermark to the input/textarea; if the browser doesn't support HTML5, the plugin will take care of it automatically.
<textarea id="keyboard" placeholder="Enter Text..."></textarea>When adding a chained set of inputs (e.g. telephone number), add a "keyboard-init-focus" class on the input that will get the initial focus.
<input type="text" class="keyboard-init-focus" /> <input type="text" /> <input type="text" />Then set the initialFocus option to false.
Support for content editable elements was added in v1.27.0.
<div id="my-editable-content" contenteditable></div>Showing defaults
$('#keyboard').keyboard({ // set this to ISO 639-1 language code to override language set by the layout // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes // language defaults to "en" if not found language : null, // string or array rtl : false, // language direction right-to-left // *** choose layout *** layout : 'qwerty', customLayout : { 'normal': ['{cancel}'] }, position : { // optional - null (attach to input/textarea) or a jQuery object // (attach elsewhere) of : null, my : 'center top', at : 'center top', // used when "usePreview" is false // (centers keyboard at bottom of the input/textarea) at2: 'center bottom' }, // allow jQuery position utility to reposition the keyboard on window resize reposition : true, // preview added above keyboard if true, original input/textarea used if false // always disabled for contenteditable elements usePreview : true, // if true, the keyboard will always be visible alwaysOpen : false, // give the preview initial focus when the keyboard becomes visible initialFocus : true, // Avoid focusing the input the keyboard is attached to noFocus : false, // if true, keyboard will remain open even if the input loses focus. stayOpen : false, // Prevents the keyboard from closing when the user clicks or // presses outside the keyboard. The `autoAccept` option must // also be set to true when this option is true or changes are lost userClosed : false, // if true, keyboard will not close if you press escape. ignoreEsc : false, // if true, keyboard will only closed on click event instead of mousedown or // touchstart. The user can scroll the page without closing the keyboard. closeByClickEvent : false, // *** change keyboard language & look *** display : { // \u2714 = check mark - same action as accept 'a' : '\u2714:Accept (Shift-Enter)', 'accept' : 'Accept:Accept (Shift-Enter)', 'alt' : 'AltGr:Alternate Graphemes', // \u232b = outlined left arrow with x inside 'b' : '\u232b:Backspace', 'bksp' : 'Bksp:Backspace', // \u2716 = big X, close - same action as cancel 'c' : '\u2716:Cancel (Esc)', 'cancel' : 'Cancel:Cancel (Esc)', // clear num pad 'clear' : 'C:Clear', 'combo' : '\u00f6:Toggle Combo Keys', // decimal point for num pad (optional); // change '.' to ',' for European format 'dec' : '.:Decimal', // down, then left arrow - enter symbol 'e' : '\u21b5:Enter', 'empty' : '\u00a0', // 'enter' : 'Enter:Enter', // \u2190 = left arrow (move caret) 'left' : '\u2190', // caps lock 'lock' : '\u21ea Lock:Caps Lock', 'next' : 'Next', 'prev' : 'Prev', // \u2192 = right arrow (move caret) 'right' : '\u2192', // \u21e7 = thick hollow up arrow 's' : '\u21e7:Shift', 'shift' : 'Shift:Shift', // \u00b1 = +/- sign for num pad 'sign' : '\u00b1:Change Sign', 'space' : ' :Space', // \u21e5 = right arrow to bar; used since this virtual // keyboard works with one directional tabs 't' : '\u21e5:Tab', // \u21b9 is the true tab symbol (left & right arrows) 'tab' : '\u21e5 Tab:Tab', // replaced by an image 'toggle' : ' ', // added to titles of keys // accept key status when acceptValid:true 'valid': 'valid', 'invalid': 'invalid', // combo key states 'active': 'active', 'disabled': 'disabled' }, // Message added to the key title while hovering, if the mousewheel plugin exists wheelMessage : 'Use mousewheel to see other keys', css : { // input & preview input : 'ui-widget-content ui-corner-all', // keyboard container container : 'ui-widget-content ui-widget ui-corner-all ui-helper-clearfix', // keyboard container extra class (same as container, but separate) popup: '', // default state buttonDefault : 'ui-state-default ui-corner-all', // hovered button buttonHover : 'ui-state-hover', // Action keys (e.g. Accept, Cancel, Tab, etc); this replaces the "actionClass" option buttonAction : 'ui-state-active', // Active keys (e.g. shift down, meta keyset active, combo keys active) buttonActive : 'ui-state-active', // used when disabling the decimal button {dec} buttonDisabled : 'ui-state-disabled', // empty button class name {empty} buttonEmpty : 'ui-keyboard-empty' }, // *** Useability *** // Auto-accept content when clicking outside the keyboard (popup will close) autoAccept : false, // Auto-accept content even if the user presses escape // (only works if `autoAccept` is `true`) autoAcceptOnEsc : false, // Prevents direct input in the preview window when true lockInput : false, // Prevent keys not in the displayed keyboard from being typed in restrictInput : false, // Additional allowed characters while restrictInput is true restrictInclude : '', // e.g. 'a b foo \ud83d\ude38' // Check input against validate function, if valid the accept button // is clickable; if invalid, the accept button is disabled. acceptValid : true, // Auto-accept when input is valid; requires `acceptValid` // set `true` & validate callback autoAcceptOnValid : false, // if acceptValid is true & the validate function returns a false, this option // will cancel a keyboard close only after the accept button is pressed cancelClose : true, // Use tab to navigate between input fields tabNavigation : false, // press enter (shift-enter in textarea) to go to the next input field enterNavigation : true, // mod key options: 'ctrlKey', 'shiftKey', 'altKey', 'metaKey' (MAC only) // alt-enter to go to previous; shift-alt-enter to accept & go to previous enterMod : 'altKey', // if true, the next button will stop on the last keyboard input/textarea; // prev button stops at first // if false, the next button will wrap to target the first input/textarea; // prev will go to the last stopAtEnd : true, // Set this to append the keyboard immediately after the input/textarea it // is attached to. This option works best when the input container doesn't // have a set width and when the "tabNavigation" option is true appendLocally : false, // Append the keyboard to a desired element. This can be a jQuery selector // string or object appendTo : 'body', // If false, the shift key will remain active until the next key is (mouse) // clicked on; if true it will stay active until pressed again stickyShift : true, // caret placed at the end of any text when keyboard becomes visible caretToEnd : false, // Prevent pasting content into the area preventPaste : false, // caret stays this many pixels from the edge of the input // while scrolling left/right; use "c" or "center" to center // the caret while scrolling scrollAdjustment : 10, // Set the max number of characters allowed in the input, setting it to // false disables this option maxLength : false, // allow inserting characters @ caret when maxLength is set maxInsert : true, // Mouse repeat delay - when clicking/touching a virtual keyboard key, after // this delay the key will start repeating repeatDelay : 500, // Mouse repeat rate - after the repeatDelay, this is the rate (characters // per second) at which the key is repeated. Added to simulate holding down // a real keyboard key and having it repeat. I haven't calculated the upper // limit of this rate, but it is limited to how fast the javascript can // process the keys. And for me, in Firefox, it's around 20. repeatRate : 20, // resets the keyboard to the default keyset when visible resetDefault : false, // Event (namespaced) on the input to reveal the keyboard. To disable it, // just set it to an empty string ''. openOn : 'focus', // When the character is added to the input keyBinding : 'mousedown touchstart', // enable/disable mousewheel functionality // enabling still depends on the mousewheel plugin useWheel : true, // combos (emulate dead keys) // http://en.wikipedia.org/wiki/Keyboard_layout#US-International // if user inputs `a the script converts it to à, ^o becomes ô, etc. useCombos : true, // *** Methods *** // Callbacks - add code inside any of these callback functions as desired initialized : function(e, keyboard, el) {}, beforeVisible : function(e, keyboard, el) {}, visible : function(e, keyboard, el) {}, beforeInsert : function(e, keyboard, el, textToAdd) { return textToAdd; }, change : function(e, keyboard, el) {}, beforeClose : function(e, keyboard, el, accepted) {}, accepted : function(e, keyboard, el) {}, canceled : function(e, keyboard, el) {}, restricted : function(e, keyboard, el) {}, hidden : function(e, keyboard, el) {}, // called instead of base.switchInput switchInput : function(keyboard, goToNext, isAccepted) {}, // used if you want to create a custom layout or modify the built-in keyboard create : function(keyboard) { return keyboard.buildKeyboard(); }, // build key callback (individual keys) buildKey : function( keyboard, data ) { /* data = { // READ ONLY // true if key is an action key isAction : [boolean], // key class name suffix ( prefix = 'ui-keyboard-' ); may include // decimal ascii value of character name : [string], // text inserted (non-action keys) value : [string], // title attribute of key title : [string], // keyaction name action : [string], // HTML of the key; it includes a <span> wrapping the text html : [string], // jQuery selector of key which is already appended to keyboard // use to modify key HTML $key : [object] } */ return data; }, // this callback is called just before the "beforeClose" to check the value // if the value is valid, return true and the keyboard will continue as it // should (close if not always open, etc) // if the value is not value, return false and the clear the keyboard value // ( like this "keyboard.$preview.val('');" ), if desired // The validate function is called after each input, the "isClosing" value // will be false; when the accept button is clicked, "isClosing" is true validate : function(keyboard, value, isClosing) { return true; } }); Home | FAQ | Setup | Usage | Options | Methods | Contenteditable | Theme | Log
Options: Layout | Language | Usability | Actions
Extensions: AltKeysPopup | Autocomplete | Caret | Extender | Mobile | Navigation | PreviewKeySet | Scramble | Typing