如何在同一文本区域中重新映射键盘
How to remap keyboard within the same textarea
目前我正在做一个项目,通过检测键控功能将字符重新映射到单词。不幸的是,我只能检索第一个字符并重新映射到我想要的单词。在我的项目中,我需要直接检索我所有的键盘输入,并直接将其转换为同一文本区域中我想要的单词。例如,当我在文本区域中键入时,它将直接转换为"are"。我不知道为什么它停止检索第二个字符并且重新映射不起作用。下面是我的代码,希望有人能告诉我我的错误。谢谢。
<textarea class="width-100" id="translated-text" onkeyup="myFunctionkey(event);" rows="10"></textarea>
<script>
function myFunctionkey(e) {
conversion();
}
function conversion(){
var x = document.getElementById('translated-text');
if(x.value == 'a'){
x.value='yes';
}
if(x.value == 'q'){
x.value = 'are';
}
}
</script>
据我了解,您只想获取输入并用完整的单词替换击键。
也许这样就可以了。我已经将onkeyup更改为onkeypress,因为从我记忆中来看,这更可靠。
<textarea id="translated-text" cols="50" rows="10" onkeypress="replaceInputChar(event);"></textarea>
<script type="text/javascript">
//create replacement map
var map = {
"a": "and",
"b": "bold",
"c": "change"
};
function replaceInputChar(e)
{
var ctl = document.getElementById("translated-text"); //control
var char = String.fromCharCode(e.keyCode); //typed char
if (char in map) //check if letter is defined in map
{
//insert replacement instead of letter
if("selectionStart" in ctl)
{
//in modern browsers we can easily mimic default behavior at cursor position
var pos = ctl.selectionStart;
ctl.value = ctl.value.substr(0, pos) + map[char] + ctl.value.substr(ctl.selectionEnd);
ctl.selectionStart = pos + map[char].length;
ctl.selectionEnd = ctl.selectionStart;
}
else
ctl.value += map[char];
if ("preventDefault" in e) //modern browser event cancelling
e.preventDefault();
else
{
//old browser event cancelling
e.returnValue = false; //IE8
return false;
}
}
}
</script>
在重新映射值时,应使用比较运算符 '==' 而不是赋值运算符 '=',如下所示:
x.value=='a'
编辑:
您应该在此处检查更新的代码以了解您的问题:https://jsfiddle.net/o4coLr5t/1/
现在,您选择在 javascript 中重新映射的字符将显示您将字符映射到的字符串。否则,按下按键时将不显示任何内容。因此,尝试将所有字符键代码添加到javascript代码中。希望有帮助。
相关文章:
- Javascript映射对象成员以返回新的扁平对象
- Undercore将对象的数组映射到以id为键的新对象
- D3.js将数据集映射到具有不同键的新数据集
- 如何使用 JavaScript 将此数组映射到新格式
- 将新的 Observable 添加到由 ko.mapping.fromJS 映射的 ObservableArray
- d3.js树映射新数据;t渲染
- 在Dynamo DB中用JavaScript向映射添加一个新的键值
- 将数组部分映射到新数组
- D3.js JSON for Each映射到新数组
- 图像映射新窗口打开
- 将外部json查找中的值映射到数组中,作为新的键/值对
- 如何切换映射-发出一个对象包含原始和新的可观察对象
- ES6映射一个对象数组,返回一个带有新键的对象数组
- 在新创建的模型哈希中缺少烬数据映射
- 为什么我不能将new Array(3)映射到一个包含新值的数组?
- 在JavaScript中,将数组的每个值映射到给定的函数以返回一个新数组
- 如何为JVectorMap-jquery插件生成新的自定义映射
- 是否有一个JavaScript库或方法可以将一个大小的数组映射到一个新大小的数组
- 使用函数式编程将数据从多个对象数组映射到Javascript中的新对象
- twitter bootstrap-Xpages,需要全局变量将字段的新ID映射回字段的原始ID,以便可以与客户端Jav