假设我在输入字段上使用jQuery捕获keyup事件。现在我正在对事件做各种事情,例如对选项卡做出反应或输入键。现在我想确定是否按下了tab,control,alt,shift这样的键或者实际改变输入的键,如字母,数字,标点符号等。
有没有办法确定这个?如何确保检查任何用户可以按的所有正确的按键?
我希望我的问题很明确。
嗯,关闭这个问题,我有点快。还有一个问题。到目前为止我的解决方案(JSFiddle):
$('input').keyup(function(e) {
var lastValue = '';
if(typeof $(this).attr('data-last-value') != 'undefined' && $(this).attr('data-last-value') != '') {
lastValue = $(this).attr('data-last-value');
}
if(lastValue != $(this).val()) {
//This is what I wanted.
}
$(this).attr('data-last-value', $(this).val());
});
问题:如果用户例如在输入中输入“hello”,然后选择“h”并按下h键,则脚本不会将其识别为所需的按键之一,因为该值不是改变。有没有办法绕过这种行为?
答案 0 :(得分:1)
也许可能的解决方案之一是在更改输入之前保存输入长度,并在某些事件中检查新的长度,即:
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
});
P.S。请记住,这不起作用IE< 9并且在IE 9中是一个小小的车。但是根据你的需要,我认为它应该是一个很好的选择
答案 1 :(得分:1)
简而言之,KeyCodes。
$('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
}
});
编辑: 有关密码的列表:http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
答案 2 :(得分:0)
$(window).keydown(function (e){
if (e.ctrlKey) alert("control");
});
修饰键列表:
e.ctrlKey
e.altKey
e.shiftKey
答案 3 :(得分:0)
试试这个
<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");
}
});
});