javascript - 我的虚拟键盘中的删除功能在 JavaScript 中不起作用

标签 javascript php html ajax virtual-keyboard

我将在我的网站上制作虚拟键盘。但是当我为键盘插入删除功能时,它不起作用。我应该怎么做才能解决这个问题?

这是我的代码

HTML 代码

<input type="text" maxlength="12" min="10" name="msidn" id="jkeyboard" min="1" style="font-weight: bold; width:500px; height: 70px; border-color:#1ba1e2; color: #1ba1e2; font-size: 30px; text-align: center; line-height: 75px;" required><div id="content">
<button class="button delete lastitem primary"><span style="font-size: 45px; color:#00aeef;"><b>Delete</b></span></button><div class="jkeyboard-jk">    
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>1</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>2</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>3</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>4</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>5</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>6</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>7</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>8</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>9</b></span></button>
<button type="button"><span style="font-size: 45px; color:#00aeef;"><b>0</b></span></button>
</div>
</div>

JS 代码:

$(document).ready(function () {

    $('#jkeyboard').focus(function() {

        var keys = [['`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '='],
                    ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']'],
                    ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', "'",'#'],
                    ['z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/']];

        var $keyboard = $('<div/>').addClass('jkeyboard-jk');
        var buttons = [];

        for(var i = 0; i < keys.length; i++){
            var $wrap = $('<div/>');

            for(var k = 0; k < keys[i].length; k++){
                var button = $('<button/>').text(keys[i][k]);
                $wrap.append(button);
            }
            buttons.push($wrap);
        }

        $keyboard.append(buttons);

        if(!$('.jkeyboard-jk').is('*')){
            $('body').append($keyboard);
        }

    });

    // button click functions


    function insertAtCaret(areaId,text) {
    debugger;
        var txtarea = document.getElementById(areaId);
        var scrollPos = txtarea.scrollTop;
        var strPos = 0;
        var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? 
            "ff" : (document.selection ? "ie" : false ) );
        if (br == "ie") { 
            txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart ('character', -txtarea.value.length);
            strPos = range.text.length;
        }
        else if (br == "ff") strPos = txtarea.selectionStart;

        var front = (txtarea.value).substring(0,strPos);  
        var back = (txtarea.value).substring(strPos,txtarea.value.length); 
        txtarea.value=front+text+back;
        strPos = strPos + text.length;
        if (br == "ie") { 
            txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart ('character', -txtarea.value.length);
            range.moveStart ('character', strPos);
            range.moveEnd ('character', 0);
            range.select();
        }
        else if (br == "ff") {
            txtarea.selectionStart = strPos;
            txtarea.selectionEnd = strPos;
            txtarea.focus();
        }
        txtarea.scrollTop = scrollPos;
    }

    $(document).on('click', '.jkeyboard-jk button', function(e){
        e.preventDefault();
        var $content = $('#content');
        var key = $(this).text();

        insertAtCaret('jkeyboard', key);
        if ($this.hasClass('delete')) {
            var html = $content.html();

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

    });


    /*$('.jkeyboard').blur(function(){
        $('.jkeyboard-jk').remove();
    });*/

});

这是我使用的 jquery 库:/jquery/1.10.2/jquery.min.js

我的JSFIDDLE:DEMO

最佳答案

选择器$(".jkeyboard-jk button")引用.jkeyboard-jk内的所有按钮。
删除按钮不适用于此条件。
将其添加到您的代码中:

 $(document).on('click', '.delete', function(e){

            var $content = $('#jkeyboard');
            var html = $content.val();

            $content.val(html.substr(0, html.length - 1));
            return false;


    });

关于javascript - 我的虚拟键盘中的删除功能在 JavaScript 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38120549/

相关文章:

php - bootstrap/Wordpress 中每行 3 个元素

javascript - Cordova 和 Windows 10 Javascript 应用程序有什么区别?

JavaScript/React - 在函数内返回 Promise

php - 如何使用 .htaccess 规则从父目录加载 .css 文件?

php - 在 Laravel 中为模型定义多个全局范围

html - 无法在 main 上放置边距,因为固定的标题和简介会移动

javascript - ng-model 将输入字段中的文本更改为 [Object object]

javascript - 如何在 javaScript 中声明一个空的数字(数字)值

javascript - 单击 [提交] -> 隐藏 DIV 容器 1 -> 显示 DIV 容器 2 -> 加载在 DIV 容器 2 中的 .PHP 文件中找到的 DIV

html - 如何防止输入字段在小型设备上超出父级的宽度?