更改按下的键的 charCode

Posted

技术标签:

【中文标题】更改按下的键的 charCode【英文标题】:Changing the charCode of the key pressed 【发布时间】:2012-03-10 00:38:52 【问题描述】:

在下面的示例中,我试图,但它没有改变。当我按“a”时,我希望它输入“b”。我做错了什么?

$("#target").keypress(function(event) 
     if ( event.which == 97 ) 
         //alert('pressed a');
         //event.preventDefault();
         event.keyCode = 98;
         event.charCode = 98;
         event.which = 98;
     
);

【问题讨论】:

我不确定你能否像这样覆盖字符代码。你有参考说明这是可能的吗? @Pekka。可以这样做: @gdoron 是的,看到了!这是一个很好的解决方法。 (您不能一般修改该值并将其进一步传递到事件链中,这就是我的意思。) @Pekka。是的......我赞成你的评论...... =) @Pekka gdorons 方法的问题是,如果光标位于文本中间,或者选择了某些内容,它将无法工作。 【参考方案1】:

您不能覆盖事件对象中的键码...

看看这个sn-p:

$('#target').keypress(function(e)
    if (e.which == 97)
        this.value = this.value + String.fromCharCode(98)
    else
        this.value = this.value + String.fromCharCode(e.which)

    ....

    return false;
)

【讨论】:

这是否意味着这样做(OP问)我可以用新字符替换输入并再次触发事件? @Heera。我没有完全理解你的意思,但它不会再次触发事件。 如果我想在用户输入 a 时触发带有字符 b 的事件怎么办? @Heera。您可以使用 $(this).keypress() 解决问题,但 *WHY 您需要这样做吗? 这样做的问题是,如果光标在文本中间,或者如果选择了某些内容,它将不起作用。【参考方案2】:

将逗号和破折号替换为斜杠。

$('.pdate').on('keypress', function (e) 
        var ch = String.fromCharCode(e.keyCode);
        $("div").text(e.keyCode)
        if (!((ch >= '0' && ch <= '9') || 
        ch == '/' || ch == ',' || ch == '-')) 
            return false;
        
        if (ch == ',' || ch == '-')
        
            var val = $(this).val();
            var s = this.selectionStart;
            val = val.slice(0, s) + "/" + val.slice(s, val.length);
            $(this).val(val)
            this.selectionStart = s +1;
            this.selectionEnd = s +1;
            return false;
        
    );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" class="pdate" />
<div></div>

【讨论】:

以上是关于更改按下的键的 charCode的主要内容,如果未能解决你的问题,请参考以下文章

如何显示键入的键的名称?

unity监测按下键的键值并输出+unity键值

如何使用 windows api 获取输入

在不丢弃其余键的情况下更改对象的键值

检测按下的键何时是第一个字符

如何检测当前按下的键?