I've been using Ilya Lebedev's JavaScript VirtualKeyboard for a while, and even created a small plugin to integrate it with jQuery. But I wanted to make it more jQuery-ish, so I made a new version of jsvk, the plugin to wrap Ilya's code.
See a demo that allows dynamic control of keyboard layout and skin (CSS), and a demo that shows multiple inputs, including contenteditable and jQuery UI's draggable.
Usage
$(element).jsvk(opts) to initialize a text-inputing element (either <input>, <textarea> or <div contenteditable>), $(element).jsvk('off') to detach the keyboard, and $(element).jsvk() reattach the keyboard leaving the options the same. Note that the VirtualKeyboard itself is a Singleton, so there can only be one open at a time (attaching to one element removes it from another) and that setting opts changes the appearance for every attached keyboard. You can do $(element).jsvk(opts) on an existing attached keyboard to change the options.
It requires bililiteRange to set the text and selections (the original code does not handle <div contenteditable> and does not trigger input events).
For <div contenteditable>, the enter key just inserts a newline, which is treated as white space and thus does not go to a new line. You could try to listen to the input event and insert a <br>, or do what I do in the demo and set the style to white-space: pre-wrap. This makes all white space significant, which is generally what I want anyway.
Options
dir- {String} URL of the directory (without a trailing slash) where the VirtualKeyboard is found. It expects a fixed structure of the directory, so just install it as is from the download. This is used exactly once per page; until it is set in some call of
jsvkall other calls are held and once it's set any future uses of this option is ignored. kbdiv- {jQuery object | Element | String } The container that the keyboard will be placed into (actually
$(kbdiv)[0]). If not set, creates a new element with$('<div>').insertAfter(this). skin- {String} Name of the CSS directory for styling. The choices are the names of the folders in the
cssdirectory inopts.dir; they are listed in the subversion directory and the right of the online demo. layout- {String} Name of language/layout, like 'IL Hebrew' (see the bottom of the online demo for choices).
langfilter- {Array of String} list of language codes (the two-letter codes; must be uppercase) to allow in the drop-down menu for language choices (see the right of the online demo for choices). Note that this overrides
opts.layout; if the selected layout is not in the filter list the first layout that is will be chosen. nokeyevents- {Boolean} The Virtual Keyboard normally captures keystroke events to translate them into the virtual keys. Set this to true to detach the event capturing (the on-screen keyboard still works with clicking the buttons). This uses a very hacky way of grabbing the event handler, so it may be buggy, though it seems to work for me.
Examples
$('#input').jsvk({ dir: '/inc/VirtualKeyboard', skin: 'air_mid' }). Open aVirtualKeyboardwith a specific skin but the default layout.$('#input').jsvk('off'). Hide and detach theVirtualKeyboard.$('#input').jsvk(). Show theVirtualKeyboard, with skin and layout unchanged.$('#input').jsvk({layout: 'US US'}). Show theVirtualKeyboard, with skin unchanged but set the language and layout.$('#input').jsvk({langfilter: ['GR', 'BA']}). Show theVirtualKeyboard, but only allow Greek and Bosnian layouts.- The Bililite Hebrew Keyboard uses this plugin, including the
nokeyeventsoption.
