如何用jQuery捕获altKey + i,u,e,n?

时间:2016-04-19 12:03:25

标签: javascript jquery macos keyboard-shortcuts

我正在尝试为外语设置键盘。我正在使用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)我得到了这些重音标记 - ˆ¨´,{{1} } - 而不是应该进入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.which65687473时,此方法有效。
我怎样才能让它正常工作?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您知道这很有趣,我也不断地问自己,即使在其他任何地方都可以正常工作,为什么有些东西在chrome中不起作用。在这种情况下,我认为这与e.whiche.keyCodee.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/