我有一个文本字段,我正在检测每个按键,如下所示:
document.getElementById("postcardText").addEventListener('keyup', checkInput, false);
在我的checkInput-function中我只检查我希望用户添加的字母。到目前为止它工作得很好,问题是如果用户按下移位按钮,例如shift + A写入大写A检测到2个密钥,A加两次。 任何人都可以建议解决方法吗?
编辑: 这似乎可以完成这项工作:
var shiftKey=false;
$(document).keyup(function (e) {
if (e.keyCode == 16) {
//alert("Shift was pressed");
shiftKey=true;
} else{
shiftKey=false;
checkInput();
}
});
然后在我的if语句中这样的
function checkInput(){
if (character=="A" ||
character=="B" &&
shiftKey==false){
//adding letter-image here
}
}
我不得不将keydown更改为keyup,否则它不会立即检测到第一个字符,而是仅在按下下一个键时才会检测到。
答案 0 :(得分:1)
来自你的评论:
基本上这是一台"机器"将输入文本转换为彩色图像。所以每个字母都有一个由它表示的图像。我希望用户在写作时已经看到它的外观。我在每个键盘上读取文本字段的数据,然后将最后一个字母作为图像添加到我的大图像中。但是班次按钮会扰乱事情...
每次在keyup上从头开始重建整个设计会不会太过分?每次收到一个keyup事件时,擦除当前图像,并遍历文本字段的每个字符以添加其图像。
$(document).keyup(function (e) {
// Do whatever you need to do to clear the image…
var myText = $("#postcardText").val();
for (var i = 0; i < myText.length; i++) {
var thisChar = myText.charAt(i);
// Add thisChar to the image…
addLetter(thisChar);
}
});
此方法的另一个好处是,您可以处理箭头键甚至删除操作,而无需为每种情况编写例外。
答案 1 :(得分:0)
您使用的是jQuery吗?如果是,您可以尝试使用以下方法拦截shift键:
$(document).keydown(function (e) {
if (e.keyCode == 16) {
alert("Shift was pressed");
}
});
因此,只有当keyCode不是16时,您才能返回false
或调用您的函数,请查看here
答案 2 :(得分:0)
试试这个,
if (character=="A" || character=="B"){
if(shiftKey==false){
//adding letter-image here
}
}