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
jsvk
all 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
css
directory 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 aVirtualKeyboard
with 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
nokeyevents
option.