【问题标题】:How can I capture altKey + i, u, e, n with jQuery?如何使用 jQuery 捕获 altKey + i、u、e、n?
【发布时间】:2016-08-11 14:19:53
【问题描述】:

我正在尝试设置外语键盘。我正在使用 jQuery 将按下的键转换为外来字符。我正在使用:

  • A - Z
  • ALT + A - Z
  • SHIFT + A - Z
  • ALT + SHIFT + A - Z

    我的代码适用于所有这些,除了这 4 个:

    • ALT + I
    • ALT + U
    • ALT + E
    • ALT + N

它在 Firefox 中运行良好,但在 Chrome 和 Safari(我使用的是 Mac)中,我得到了这些重音符号 - ˆ¨´˜ - 而不是那些应该进入textarea。

以下是部分代码:

function type(e, char, textArea) {
    e.preventDefault();
    var start = textArea[0].selectionStart;
    var end = textArea[0].selectionEnd;
    var len = textArea.val().length;
    var newPos = start + char.length;
    textArea.val(textArea.val().substring(0, start) + char + textArea.val().substring(end, len));
    textArea[0].setSelectionRange(newPos, newPos);
}
$('textarea').keydown(function(e) {
        var textArea = $(this);
        if (e.which == 65 && e.altKey) {type(e, 'अ', textArea);return false;}
        if (e.which == 68 && e.altKey) {type(e, 'ड', textArea);return false;}
        if (e.which == 73 && e.altKey) {type(e, 'इ', textArea);return false;}
        if (e.which == 74 && e.altKey) {type(e, 'ज्ञ', textArea);return false;}
});

e.which656874 时有效,但不是73
我怎样才能让它正常工作?

【问题讨论】:

  • 仅供参考,return falsee.preventDefault()e.stopPropagation() 相同。
  • 你能做一个console.loge.which 并检查它在执行 [ALT] + [I] 时显示的内容吗?使用这个JSFiddle,它适用于我的 chrome (Windows 10)
  • @Jordumus:在您的 JSFiddle 上,我得到 18 + 229。这与我为 [ALT] + [u]、[ALT] + [e] 和 [ALT] + [ 得到的代码相同n]。
  • 我对其进行了一些更改,它在 chrome 中运行良好。 here's my fiddle.

标签: javascript jquery macos keyboard-shortcuts


【解决方案1】:

你知道这很有趣,我也经常问自己为什么有些东西不能在 chrome 中工作,即使它在其他地方工作得很好。在这种情况下,我假设这与 e.whiche.keyCode 已针对 e.keye.code 贬值这一事实有关。

值得注意的是,我仍然在生产中使用 e.keyCode,所以我知道it still works with the latest version of chrome。也许做一些console.log(e) 看看实际返回了什么值?

我的个人计算机上没有 chrome,所以我无法对此进行测试,但我简化了您的代码并制作了一个可以在我的机器上运行的小提琴。希望它可以帮助您指明正确的方向。

function InsertSymbol(symbol, $selector) {
  let cursor = $selector[0].selectionStart,
      text = $selector.val();
      
  $selector.val(text.substr(0, cursor) + symbol + text.substr(cursor)).focus()[0].setSelectionRange(++cursor, cursor);
}

$('textarea').on('keydown', function(e) {
  if (e.altKey) {
    e.preventDefault();
    
    switch (e.keyCode) {
      case 69: InsertSymbol('इ', $(this)); break;
      case 73: InsertSymbol('अ', $(this)); break;
      case 78: InsertSymbol('ज्ञ', $(this)); break;
      case 85: InsertSymbol('ड', $(this)); break;
    }
  }
});

https://jsfiddle.net/rvgj35kt/2/

【讨论】:

    【解决方案2】:

    我在 Mac 上使用 Chrome,而您的 jsFiddle 示例 https://jsfiddle.net/s0fmpgaj/ 正在运行。当我按ALT + SHIFT + i 它返回您定义的特殊字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多