如何防止“;后置重音“;在输入文本中

how to prevent "post accent" in input text

本文关键字:输入 文本 何防止      更新时间:2024-05-30

我相信这是一个简单的问题,但在谷歌上搜索了几个小时后我找不到任何答案(也许我无法在搜索中使用正确的单词:-p)

我有一个javascript方法,可以防止用户用数字以外的其他字符填充文本框,正如下面的代码所示,它用于KeyDown事件:

function checkNumberInput(e) {
  // Allow: backspace, delete, tab, escape, enter and .
  if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||
      // Allow: Ctrl+A, Command+A
      (e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true)) ||
      // Allow: home, end, left, right, down, up
      (e.keyCode >= 35 && e.keyCode <= 40)) {
    // let it happen, don't do anything
    return;
  }
  // Ensure that it is a number and stop the keypress
  if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
    e.preventDefault();
  }
}

问题是,如果用户键入"等待"第二个键的重音字符(如~´`^),则当紧接着键入数字时,它会出现在文本框中。

例如:

a) types 1 => [1________]
b) types ~ => [1________]
c) types 3 => [1~3______]

我该如何防止这种情况发生?提前谢谢。

您的意思是'a转换为а́吗?这是系统内置的,你不能改变它
你能做的就是在那之后检查输入。这样你也可以防止用鼠标粘贴:

$('input').on('keydown', checkNumberInput).on('blur focus', function(){
    var val = $('input').val();
    // now remove everything that is not allowed
    val = val.replace(/[^0-9.]+/g, '');
    $('input').val(val);
})

(确切的实现显然并不完美,只是为了说明正在发生的事情)

https://jsfiddle.net/5afwdhzx/

关于真正的即时修复-给这个闭包取一个名字,并在keyDown函数中以短延迟调用它,就像@haroldo上面说的那样。

https://jsfiddle.net/5afwdhzx/1/