You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

String.fromCharCode函数在HTML输入框移动端键盘的适配问题

解决移动端键盘无法通过String.fromCharCode获取输入字符的问题

问题根源

移动端虚拟键盘的键码(e.which/e.keyCode)和物理键盘的键码体系不兼容,且输入法输入时,键盘事件的键码往往不等于实际输入字符的Unicode值,导致String.fromCharCode无法正确转换出输入的字符。

解决方案

方案1:使用input事件直接获取输入内容(推荐)

input事件会在输入框内容实际变化时触发,不管是虚拟键盘输入、粘贴还是输入法联想输入,都能准确获取最新内容。如果只需要当前输入的单个字符,可以取内容的最后一位:

$(".inputsmeter").on('input', function() {
    const fullContent = $(this).val();
    // 获取最后输入的字符
    const inputChar = fullContent.slice(-1);
    alert(inputChar);
});

如果需要精准对比输入前后的内容差异(比如处理删除操作),可以保存上一次的内容进行对比:

let prevContent = '';
$(".inputsmeter").on('input', function() {
    const currentContent = $(this).val();
    let inputChar = '';
    // 新增字符的情况
    if (currentContent.length > prevContent.length) {
        inputChar = currentContent.slice(prevContent.length);
    }
    // 删除字符的情况(可选)
    else if (currentContent.length < prevContent.length) {
        inputChar = '已删除字符';
    }
    alert(inputChar);
    prevContent = currentContent;
});

方案2:改用e.key获取输入字符(键盘事件场景)

如果必须使用键盘事件(比如需要监听特定按键),可以直接使用e.key属性,它会返回实际输入的字符(而非键码),移动端主流浏览器均支持:

$(".inputsmeter").keyup(function(e) {
    const inputChar = e.key;
    // 过滤功能键(如回车、退格等,这类键的key值长度大于1)
    if (inputChar.length === 1) {
        alert(inputChar);
    }
});

注意事项

  • 避免依赖keyCode/which这类过时的键码属性来转换字符,无论是移动端还是桌面端,e.key或input事件都是更可靠的选择。
  • 处理中文等需要输入法候选的输入时,input事件是唯一能准确获取最终输入内容的方式,键盘事件可能在候选词确认前就触发,无法拿到正确结果。

内容的提问来源于stack exchange,提问作者mutahir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:10:27