【问题标题】:how to detect the shift-button/clean input in javascript textfield?如何检测 javascript 文本字段中的 shift 按钮/清除输入?
【发布时间】:2014-05-05 15:24:03
【问题描述】:

我有一个文本字段,我正在检测这样的每个按键:

document.getElementById("postcardText").addEventListener('keyup', checkInput, false);

在我的 checkInput 函数中,我只检查我希望用户添加的字母。到目前为止它工作正常,问题是如果用户按下 shift 按钮,例如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,否则它不会立即检测到第一个字符,而只会在按下下一个键时检测到。

【问题讨论】:

  • 您到底想完成什么?您是否试图以某种方式操纵文本字段的内容?如果用户输入特定字符,您是否会触发其他功能?根据您要完成的工作,也许您应该从每个按键的文本字段中读取当前数据,而不是尝试识别每个用户按键的意图。
  • 基本上这是一个将输入文本转换为彩色图像的“机器”。所以每个字母都有一个代表它的图像。我希望用户在写作时已经看到它的样子。我在每个键盘上读取文本字段的数据,然后将最后一个字母作为图像添加到我的大图像中。但是换档按钮会干扰事情......所以这就是我识别它的原因......
  • 如果有更简单的方法,请告诉我!

标签: javascript validation input textfield


【解决方案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);
    }
});

此方法还有一个额外的好处,即您可以处理箭头键甚至删除,而无需为每种情况编写异常。

【讨论】:

  • 这是有道理的,但正如我所见,每次用户键入内容时我都需要加载所有图像。这不是很无效吗?
  • 我的解决方案是避免在用户每次输入内容时都加载所有字母,将所有可能的字母添加到不可见的 div 中,通过 id 识别它们并在用户输入内容时复制该图像的来源。这工作得很好!谢谢!
【解决方案2】:

你在使用 jQuery 吗?如果是,您可以尝试使用以下方法拦截 shift 键:

$(document).keydown(function (e) {
    if (e.keyCode == 16) {
        alert("Shift was pressed");
    }
});

所以你可以返回false或者只有在keyCode不是16时才调用你的函数,看看here

【讨论】:

  • 一个 jsFiddle 复制了这里发布的非常简单的代码,我认为这不是一个有效的答案......
  • 您是否尝试在 if (e.keyCode != 16) 中调用您的函数?
【解决方案3】:

试试这个,

if (character=="A" || character=="B"){
  if(shiftKey==false){
     //adding letter-image here
  }
}

【讨论】:

  • 您能解释一下为什么它的工作方式与 'if (character=="A" || character=="B" && shiftKey==false)' 不同吗?显然是的。我不知道为什么...
  • 这个数学逻辑你能看懂吗,10+2*5和(10+2)*5有区别吗?答案应该不同。
  • 那么这可能吗? :'if ((character=="A" || character=="B") && shiftKey==false)'
  • 是的,但我不确定,我在我的项目中尝试过一次,但它不满足给定条件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多