【问题标题】:JavaScript keycodes are not working in FirefoxJavaScript 键码在 Firefox 中不起作用
【发布时间】:2018-01-19 02:32:21
【问题描述】:

我正在使用 JavaScript 键码,它们不能在 Firefox 中工作,而是在 Chrome 和 IE 中工作。我已经为 Firefox 调试了前端代码,我得到的密钥代码为 0

这是我的代码:

$scope.Validate = function(event,indexVal){
    if ((event.keyCode > 64 && event.keyCode < 91)|| (event.keyCode > 159 && event.keyCode < 166) || (event.keyCode > 96 && event.keyCode < 123) || (event.keyCode == 165) ||(event.keyCode == 32)
                        || (event.keyCode == 164) || (event.keyCode == 130) || (event.keyCode == 181) || (event.keyCode == 144) || (event.keyCode == 214) ||
                        (event.keyCode == 224) ||(event.keyCode == 233)) {
                }else{
                    event.preventDefault();
                }
}

您能否建议一种在 Firefox 中也实现此功能的方法。

【问题讨论】:

标签: javascript angularjs firefox


【解决方案1】:

在 Firefox 中,event.keyCode 并不总是有效,这取决于绑定事件。您必须使用event.which。请参阅此post 了解更多信息。

$scope.Validate = function(event,indexVal) {
  var key = event.keyCode || event.which;
  if ((key > 64 && key < 91) || 
    (key > 159 && key < 166) || 
    (key > 96 && key < 123) || 
    (key == 165) ||
    (key == 32) ||
    (key == 37) ||
    (key == 39) ||
    (key == 164) || 
    (key == 130) || 
    (key == 181) || 
    (key == 144) || 
    (key == 214) ||
    (key == 224) ||
    (key == 233)
  ) {
    // Do something.
  } else {
    event.preventDefault();
  }
}

【讨论】:

  • 工作正常,但我怎样才能在 mozilla 中允许左右箭头
  • 方向键的键码分别为 37 到 40(左、上、右、下)。所以你必须将它们添加到你的条件中。
  • 在 chrome 中它默认接受。但即使我保留 37 它也不允许箭头。
  • ASCII 不是键码!键码是键盘上按键的数字表示,而 ASCII 是特定字符的数字表示。
【解决方案2】:

它工作正常,但略有不同

$scope.Validate = function (event, indexVal) {
    var code = event.which || event.keyCode;

    if (!(
            (code > 64 && code < 91)
            || (code > 159 && code < 166) 
            || (code > 96 && code < 123) 
            || ~[165, 32, 164, 130, 181, 144, 214, 224, 233].indexOf(code)
    )) {
        event.preventDefault();
    }
}

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode

已弃用 KeyboardEvent.keyCode 此功能已从 Web 标准中删除。尽管某些浏览器可能仍然支持它,但它正在被删除。尽可能避免使用它并更新现有代码;请参阅本页底部的兼容性表以指导您的决定。请注意,此功能可能随时停止工作。

【讨论】:

  • 很好,让我试一次
  • $scope.Validate = function(event,indexVal){} 我需要把这个事件和 indexVal 传递给这个函数吗
  • event 就足够了;但是,可能出于其他验证目的indexVal 也将被使用
  • 仅供参考:KeyboardEvent.which 在 MDN 上也标记为 deprecated
  • @Murali,它根本不会有一些差异......但我已经更新了答案。正如我所提到的,如果indexVal 未使用,只需将其从范围中删除
猜你喜欢
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2014-09-01
  • 2011-07-09
相关资源
最近更新 更多