目前,我正在通过检测按键功能将字符重新映射到单词的项目。不幸的是,我只能检索第一个字符并重新映射到我想要的单词。在我的项目中,我需要直接检索所有键盘输入,并将其直接转换为我想要的同一文本区域中的单词。例如,当我输入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>