【问题标题】:Only allow numbers in an input with javascript and allow copy and paste?只允许使用javascript输入数字并允许复制和粘贴?
【发布时间】:2010-07-15 16:03:17
【问题描述】:

我使用这个函数只允许文本输入中的数字。

$('input').bind('keydown', function(e) {

    var key = e.charCode || e.keyCode || 0;

    return (
         key == 8 ||
         key == 9 ||
         key == 46 ||
         (key >= 37 && key <= 40) ||
         (key >= 48 && key <= 57) ||
         (key >= 96 && key <= 105));
});

我如何还允许复制和粘贴?我已经尝试添加 keycode 17 进行控制,但它仍然不起作用。

对于组合键,您有什么特别需要做的吗?

谢谢

【问题讨论】:

  • 第一行不是 jQuery 选择器吗?这不应该至少有一个 jQuery 标签吗?
  • 或者该标签是为特定于 jQuery 的问题保留的? (只是好奇)
  • @advs89 再想一想(不要懒惰地阅读完整的问题,而不仅仅是第一行......)
  • 我不完全明白:为什么要阻止人们输入非数字字符,然后允许他们随意粘贴?
  • 我想提问者希望剪贴板数据也得到验证......(即没有非数字字符)

标签: javascript validation


【解决方案1】:

你最好用类似的东西:

$('input').bind('keyup', function(e) {
  this.value = this.value.replace(/[^0-9]/g,'');
});

或者您也可以使用change 事件。在这种情况下,无论数据如何进入该字段,都将对其进行验证(并删除非数字输入)。 ​

【讨论】:

  • +1 表示使用 change 事件的简单性和安全性。
【解决方案2】:

记录最后一次按下的键码。由于您使用的是onkeydown,因此 cmd-v 将显示为键码为 224 (cmd) 的事件,然后是键码为 86 (v) 的事件。如果前一个键匹配 cmd 和后一个 v,则允许它通过。

(您可能还会检查 ctrl 以获取 Windows/Linux 贴纸)

【讨论】:

  • 粘贴的方法远不止这些:例如,从上下文和编辑菜单。还有拖拽。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多