Javascript 使用不可打印的字符(如CTRL、ALT或shift键)镜像输入内容

Javascript 使用不可打印的字符(如CTRL、ALT或shift键)镜像输入内容,javascript,javascript-events,non-printable,Javascript,Javascript Events,Non Printable,当按下不可打印的字符时,它将被替换为CTRL=17,例如使用“”[CTRL]”。 下面是一个示例代码 $('#textbox1').keyup(function (event) { if (8 != event.keyCode) { if(17==event.keyCode){ $('#textbox1').val($('#textbox1').val()+"[CTRL]") $('#textbox2').val($('#textbox1')

当按下不可打印的字符时,它将被替换为CTRL=17,例如使用“”[CTRL]”。 下面是一个示例代码

$('#textbox1').keyup(function (event) {
    if (8 != event.keyCode) {
       if(17==event.keyCode){
        $('#textbox1').val($('#textbox1').val()+"[CTRL]")
        $('#textbox2').val($('#textbox1').val());
       }else{
        $('#textbox2').val($('#textbox1').val());
       }

    } else {

        $('#textbox2').val($('#textbox1').val());
    }
});

问题是,当用户按backspace时,第二个输入必须反映第一个输入的内容,因此必须像任何其他字符一样立即删除“[CTRL]”

您可以在
键下检查输入字段中的最后一个字符。如果是
]
则可以删除从右到最后找到的开口括号的所有内容
[
。不幸的是,如果光标位于
'[]'内部,则此操作不起作用

$('#textbox1').keydown(function(event) {
    if(8 == event.keyCode) {
        var element = $(this),
            value = element.val(),
            lastChar = value.slice(-1);

        if(lastChar == ']') {
            var lastIndex = value.lastIndexOf('['),
                index = value.length - lastIndex;

            element.val(value.slice(0, -index) + "]");
        }
    }
});

您可以在
键中检查输入字段中的最后一个字符。如果它是
]
您可以删除从右到最后找到的开口括号的所有内容
[
。不幸的是,如果光标位于
'[]'
内,则此操作不起作用

$('#textbox1').keydown(function(event) {
    if(8 == event.keyCode) {
        var element = $(this),
            value = element.val(),
            lastChar = value.slice(-1);

        if(lastChar == ']') {
            var lastIndex = value.lastIndexOf('['),
                index = value.length - lastIndex;

            element.val(value.slice(0, -index) + "]");
        }
    }
});

您可以在
键中检查输入字段中的最后一个字符。如果它是
]
您可以删除从右到最后找到的开口括号的所有内容
[
。不幸的是,如果光标位于
'[]'
内,则此操作不起作用

$('#textbox1').keydown(function(event) {
    if(8 == event.keyCode) {
        var element = $(this),
            value = element.val(),
            lastChar = value.slice(-1);

        if(lastChar == ']') {
            var lastIndex = value.lastIndexOf('['),
                index = value.length - lastIndex;

            element.val(value.slice(0, -index) + "]");
        }
    }
});

您可以在
键中检查输入字段中的最后一个字符。如果它是
]
您可以删除从右到最后找到的开口括号的所有内容
[
。不幸的是,如果光标位于
'[]'
内,则此操作不起作用

$('#textbox1').keydown(function(event) {
    if(8 == event.keyCode) {
        var element = $(this),
            value = element.val(),
            lastChar = value.slice(-1);

        if(lastChar == ']') {
            var lastIndex = value.lastIndexOf('['),
                index = value.length - lastIndex;

            element.val(value.slice(0, -index) + "]");
        }
    }
});

您可以使用
keyCode
和/或与
charCode
结合使用(如果需要)。基本思路是:

  • 创建数组/对象中所有必需键代码的映射
  • 处理say
    keydown
    的事件并侦听keycode
  • 在地图中查找钥匙代码,如果找到,则显示
  • 防止默认设置(例如,防止退格浏览)
  • 如果在地图中找不到,让角色像往常一样通过
  • 一个非常基本的例子:

    演示:

    相关js:

    编辑:(根据评论) 概念保持不变,只是将值复制到第二个输入:

    演示2:

    关于删除描述,我无法通过缓存映射中最后插入的描述来完成。不知何故,我一直在用一个变量处理正则表达式。无论如何,一个更简单的解决方案是为带有硬编码映射的keyup添加另一个事件处理程序

    感谢@serakfalcon for,我们在这里使用它:

    $('#txt1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(Tab|Enter|Shift|Ctrl|Alt|Break|Caps Lock|Esc|Space|Page (Up|Down)|End|Home|Left|Up|Right|Down|Insert|Delete)\]$/,' '));
            $("#txt2").val(el.val());
        }
    });
    

    您可以使用
    keyCode
    和/或与
    charCode
    结合使用(如果需要)。基本思想是:

  • 创建数组/对象中所有必需键代码的映射
  • 处理say
    keydown
    的事件并侦听keycode
  • 在地图中查找钥匙代码,如果找到,则显示
  • 防止默认设置(例如,防止退格浏览)
  • 如果在地图中找不到,让角色像往常一样通过
  • 一个非常基本的例子:

    演示:

    相关js:

    编辑:(根据评论) 概念保持不变,只是将值复制到第二个输入:

    演示2:

    关于删除描述,我无法通过缓存映射中最后插入的描述来完成。不知何故,我一直在用一个变量处理正则表达式。无论如何,一个更简单的解决方案是为带有硬编码映射的keyup添加另一个事件处理程序

    感谢@serakfalcon for,我们在这里使用它:

    $('#txt1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(Tab|Enter|Shift|Ctrl|Alt|Break|Caps Lock|Esc|Space|Page (Up|Down)|End|Home|Left|Up|Right|Down|Insert|Delete)\]$/,' '));
            $("#txt2").val(el.val());
        }
    });
    

    您可以使用
    keyCode
    和/或与
    charCode
    结合使用(如果需要)。基本思想是:

  • 创建数组/对象中所有必需键代码的映射
  • 处理say
    keydown
    的事件并侦听keycode
  • 在地图中查找钥匙代码,如果找到,则显示
  • 防止默认设置(例如,防止退格浏览)
  • 如果在地图中找不到,让角色像往常一样通过
  • 一个非常基本的例子:

    演示:

    相关js:

    编辑:(根据评论) 概念保持不变,只是将值复制到第二个输入:

    演示2:

    关于删除描述,我无法通过缓存映射中最后插入的描述来完成。不知何故,我一直在用一个变量处理正则表达式。无论如何,一个更简单的解决方案是为带有硬编码映射的keyup添加另一个事件处理程序

    感谢@serakfalcon for,我们在这里使用它:

    $('#txt1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(Tab|Enter|Shift|Ctrl|Alt|Break|Caps Lock|Esc|Space|Page (Up|Down)|End|Home|Left|Up|Right|Down|Insert|Delete)\]$/,' '));
            $("#txt2").val(el.val());
        }
    });
    

    您可以使用
    keyCode
    和/或与
    charCode
    结合使用(如果需要)。基本思想是:

  • 创建数组/对象中所有必需键代码的映射
  • 处理say
    keydown
    的事件并侦听keycode
  • 在地图中查找钥匙代码,如果找到,则显示
  • 防止默认设置(例如,防止退格浏览)
  • 如果在地图中找不到,让角色像往常一样通过
  • 一个非常基本的例子:

    演示:

    相关js:

    编辑:(根据评论) 概念保持不变,只是将值复制到第二个输入:

    演示2:

    关于删除描述,我无法通过缓存映射中最后插入的描述来完成。不知何故,我一直在用一个变量处理正则表达式。无论如何,一个更简单的解决方案是为带有硬编码映射的keyup添加另一个事件处理程序

    感谢@serakfalcon for,我们在这里使用它:

    $('#txt1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(Tab|Enter|Shift|Ctrl|Alt|Break|Caps Lock|Esc|Space|Page (Up|Down)|End|Home|Left|Up|Right|Down|Insert|Delete)\]$/,' '));
            $("#txt2").val(el.val());
        }
    });
    

    您始终可以使用正则表达式

    $('#textbox1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(CTRL|ALT|SHIFT)\]$/,' '));
        }
    });
    


    编辑:

    您可以始终使用正则表达式

    $('#textbox1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(CTRL|ALT|SHIFT)\]$/,' '));
        }
    });
    


    编辑:

    您可以始终使用正则表达式

    $('#textbox1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(CTRL|ALT|SHIFT)\]$/,' '));
        }
    });
    


    编辑:

    您可以始终使用正则表达式

    $('#textbox1').keydown(function(event) {
        if(8 == event.keyCode) {
            var el = $(this);
            el.val(el.val().replace(/\[(CTRL|ALT|SHIFT)\]$/,' '));
        }
    });
    

    编辑:

    你不读吗