【问题标题】:how to prevent "post accent" in input text如何防止输入文本中的“后重音”
【发布时间】:2016-04-13 13:52:05
【问题描述】:

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

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

【问题讨论】:

  • 如果你也添加keyUp事件呢?
  • 在keyUp事件结束时,也许您可​​以扫描输入的'value'属性以查找非数字字符,如果找到则将其删除;也许您可以使用setTimeout() 安排对“value”属性的检查,以便在 keyUp 后几毫秒执行...
  • 我用过@Al.G.方法与 keyUp 结合,它成功了。我想删除“写擦除”效果,但我认为这是不可能的。谢谢大家的帮助!
  • @thiagoprzy 看看我的答案更新。该演示可以满足您的需求。对了,你为什么不用&lt;input type=number&gt;
  • @Al.G.,客户不希望“箭头”增加和减少在框边呈现的值 =)

标签: javascript jquery html keycode


【解决方案1】:

你的意思是'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/

【讨论】:

  • 我想去掉“写-擦除”效果,但我认为不可能,对吧?好吧,我所做的唯一更改是将事件从“模糊焦点”更改为“keyup”,以便立即删除重音。感谢您的帮助!
  • @thiagoprzy 答案已编辑,现在应该可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多