我正在尝试为外语设置键盘。我正在使用jQuery将按键转换成外来字符。我正在使用:
ALT + SHIFT + A - Z
我的代码适用于所有这些,除了这4:
它在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.which
,65
和68
而74
为73
时,此方法有效。
我怎样才能让它正常工作?
答案 0 :(得分:0)
我在Mac上使用Chrome并且您的jsFiddle示例https://jsfiddle.net/s0fmpgaj/正在运行。当我按ALT + SHIFT + i
时
它返回您定义的特殊字符。
答案 1 :(得分:0)
您知道这很有趣,我也不断地问自己,即使在其他任何地方都可以正常工作,为什么有些东西在chrome中不起作用。在这种情况下,我认为这与e.which和e.keyCode的e.key和e.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;
}
}
});