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