javascriptjqueryhtmlon-screen-keyboard

oninput event for jquery onscreen keyboard


I have a textarea and I want something to happend, every time when the user types in something, now for that I have the following two lines of code which work:

<textarea oninput="alert('')" id="write" rows="6" cols="60"></textarea>

and

<textarea onkeyup="alert('')" id="write" rows="6" cols="60"></textarea>

However, this only works with a real keyboard. When I use a virtual onscreen keyboard, the alert never gets triggered.

I have created a jsfiddle and this is the javascript:

$(function(){
    var $write = $('#write'),
        shift = false,
        capslock = false;

    $('#keyboard li').click(function(){
        var $this = $(this),
            character = $this.html(); // If it's a lowercase letter, nothing happens to this variable

        // Shift keys
        if ($this.hasClass('left-shift') || $this.hasClass('right-shift')) {
            $('.letter').toggleClass('uppercase');
            $('.symbol span').toggle();

            shift = (shift === true) ? false : true;
            capslock = false;
            return false;
        }

        // Caps lock
        if ($this.hasClass('capslock')) {
            $('.letter').toggleClass('uppercase');
            capslock = true;
            return false;
        }

        // Delete
        if ($this.hasClass('delete')) {
            var html = $write.html();

            $write.html(html.substr(0, html.length - 1));
            return false;
        }

        // Special characters
        if ($this.hasClass('symbol')) character = $('span:visible', $this).html();
        if ($this.hasClass('space')) character = ' ';
        if ($this.hasClass('tab')) character = "\t";
        if ($this.hasClass('return')) character = "\n";

        // Uppercase letter
        if ($this.hasClass('uppercase')) character = character.toUpperCase();

        // Remove shift once a key is clicked.
        if (shift === true) {
            $('.symbol span').toggle();
            if (capslock === false) $('.letter').toggleClass('uppercase');

            shift = false;
        }

        // Add the character
        $write.html($write.html() + character);
    });
});

How do I change it so the onscreen keyboard will have the same effect as a regular one?


Solution

  • You can trigger the input event manually when changing the textarea's inner html with something like this.

    $('textarea').trigger('input');
    

    Here is the updated JSFiddle link: https://jsfiddle.net/tpztp48r/4/