更改按下的键的charCode

3
在下面的例子中,我试图更改按键的charCode,但是它并没有改变。当我按下"a"时,我想要输入"b"。我做错了什么?
$("#target").keypress(function(event) {
     if ( event.which == 97 ) {
         //alert('pressed a');
         //event.preventDefault();
         event.keyCode = 98;
         event.charCode = 98;
         event.which = 98;
     }
});

2
我不确定你是否可以像那样覆盖字符代码。你有参考资料说明这是可能的吗? - Pekka
@Pekka。可以这样做: - gdoron
@gdoron 是的,看到了!那是个好的解决方法。(不过你通常不能修改值并将其传递到事件链下面,这就是我所说的。) - Pekka
@Pekka。没错...而且我给你的评论点了赞...=) - gdoron
@Pekka gdorons 的方法存在问题,如果光标在文本中间或者有选中的内容,该方法将无法生效。 - DavidW
2个回答

4
您无法重写事件对象中的按键代码...
看一下这段代码:
$('#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;
})

如果我想在用户输入a时用字符b触发事件怎么办? - The Alpha
@Heera。你可以使用$(this).keypress()来解决问题。但是,为什么需要这样做呢? - gdoron
谢谢,只是出于好奇,学习新东西有什么不好,头脑总是渴望的,不想错过任何机会! - The Alpha
3
问题在于,如果光标位于文字中间或者有内容被选中,那么这种方法就不起作用了。 - DavidW
看起来只能这样了。我还会使用https://dev59.com/dnNA5IYBdhLWcg3wdtz5#2819568在选择或光标位置插入。 - DavidW
显示剩余2条评论

0

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

$('.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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接