Jquery 确定input keyEvent是否添加或删除了某些内容

Jquery 确定input keyEvent是否添加或删除了某些内容,jquery,events,input,onkeyup,Jquery,Events,Input,Onkeyup,假设我在输入字段上用jQuery捕捉一个keyup事件。现在,我正在对事件执行各种操作,例如对tab键或enter键作出反应。现在我想确定是否按下了tab、control、alt、shift等键,或者是一个实际改变输入的键,如字母、数字、标点符号等 有没有办法确定这一点?我如何确保检查任何用户在任何地方都可以按下的所有正确键 我希望我的问题很清楚 编辑1: 嗯,我有点快结束了问题。还有一个问题。到目前为止,我的解决方案是(): 问题:例如,如果用户在输入中输入“hello”,然后选择“h”并按下

假设我在输入字段上用jQuery捕捉一个keyup事件。现在,我正在对事件执行各种操作,例如对tab键或enter键作出反应。现在我想确定是否按下了tab、control、alt、shift等键,或者是一个实际改变输入的键,如字母、数字、标点符号等

有没有办法确定这一点?我如何确保检查任何用户在任何地方都可以按下的所有正确键

我希望我的问题很清楚

编辑1: 嗯,我有点快结束了问题。还有一个问题。到目前为止,我的解决方案是():

问题:例如,如果用户在输入中输入“hello”,然后选择“h”并按下h键,则脚本不会将其识别为所需的按键之一,因为该值没有更改。有没有办法避免这种行为

$(window).keydown(function (e){
    if (e.ctrlKey) alert("control");
});
修改器关键点列表:

e.ctrlKey
e.altKey
e.shiftKey

可能的解决方案之一是在更改输入之前保存输入长度,并在某些情况下检查新长度,即:

var inputsLength = {};

$(window).keydown(function (e){
  var input = e.eventTarget,
      name = input.name,
      oldLength = inputsLength[name];

  if (!oldLength) {
    inputsLength[name] = input.length
  }

  if (oldLength !== input.length) {
    //something change
  } else {
    //everything is the same
  }

  if (e.ctrlKey) alert("control");
});
对于您更新的问题,另一种解决方案是使用“输入”事件,它只捕获您在这种情况下真正想要的内容

$(window).on('input', function(e) {
    //Do what you need
});
请记住,这在IE<9时不起作用,在IE 9中有点麻烦。但是为了满足您的需要,我认为它应该非常适合

简言之,就是键盘密码

$('element').keyup(function (e) {
    var event = e || window.event; //for firefox mainly
    switch (e.keyCode) {
        case 13:
            //do something here (keycode 13 is enter)
            break;
        //continue for all keycodes you are checking for
    }

    //alternatively
    var modKeys = [69, 70, 71]; //ect... (keys which will modify the input)
    var otherKeys = [9, 13, 16]; // ect... (keys which wont)

    if ($.inArray(e.keyCode, modKeys)) {
        //code for modification key
    } else if ($.inArray(e.keyCode, otherKeys)) {
        //code for non-modification keys
    }
});
编辑: 有关键码列表:

请尝试以下操作

<input type="text" id="txtboxToFilter" />

(document).ready(function() {
    $("#txtboxToFilter").keyu[(function(event) {

        if (event.ctrlKey == true)
            alert("control key pressed");
        //or you can do something like this also using key codes
        if (event.keyCode == 9)
            alert("tab key pressed");

        }

    });
});

(文档).就绪(函数(){
$(“#txtboxToFilter”).keyu[(函数(事件){
如果(event.ctrlKey==true)
警报(“按下控制键”);
//或者,您也可以使用按键代码执行类似操作
如果(event.keyCode==9)
警报(“按下制表键”);
}
});
});

是的,但例如NumKey、up、down、left、right等等又如何呢?要注意的键太多了。如何捕获所有对输入内容没有直接影响的键?查看ascii表,看看您可以接受和不能接受的键的范围。我的问题是:几乎无法检查所有键盘布局上所有可能的键。谢谢你的回答!我稍微修改了它,以存储输入的旧值,而不仅仅是长度,以便捕捉替换字母。现在它像一个符咒一样工作!抱歉,我接受这个有点快。我编辑了这个问题,因为这个解决方案仍然存在问题。你可以吗为您描述的问题提供一个可用的小提琴?有点难以理解您想要添加小提琴的内容。问题:如果用户按某个键编辑内容(例如字母、标点符号、退格等),而不是按其他键(例如alt、shift、left、right、tab等),我希望条件为true。我如何区分这两种类型的键?如果输入没有改变,为什么你需要跟踪被按下的字母?如果你真的需要跟踪,我想你需要检查所有可能的非字母键码,并检查它们。在我的特殊情况下,用户希望焦点跳到下一个inp输入有效值后立即输入ut字段。有时这只是一个字母。因此,如果他们(例如)按tab键关注包含单个字母的输入,他们可能会再次按该字母,并期望发送到下一个输入。明白了。请参阅我的更新,该更新应该真正起作用。
<input type="text" id="txtboxToFilter" />

(document).ready(function() {
    $("#txtboxToFilter").keyu[(function(event) {

        if (event.ctrlKey == true)
            alert("control key pressed");
        //or you can do something like this also using key codes
        if (event.keyCode == 9)
            alert("tab key pressed");

        }

    });
});