假设我在输入字段上使用jQuery捕获一个keyup事件。现在,我正在对事件做各种事情,例如,响应选项卡或输入键。现在我想确定一个键,如制表符,控制键,alt键,移位键,或者是一个真正改变输入的键,比如字母,数字,标点符号等等。
有什么办法能确定这个吗?如何确保检查任何地方的任何用户都可以按下的所有正确的密钥?
我希望我的问题是清楚的。
编辑1:
好吧,我在回答问题的时候有点快了。仍然有一个问题。到目前为止我的解决方案(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键,脚本就不会将其识别为所需的按键之一,因为该值没有被更改。有办法避免这种行为吗?
发布于 2014-01-29 08:34:28
可能的解决方案之一是在更改输入之前节省输入的长度,并在某些情况下检查新的长度,即:
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,在IE9中也有一点小问题。但是,为了满足您的需要,我认为这应该是一个很好的选择。
发布于 2014-01-29 08:38:48
简而言之,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
发布于 2014-01-29 08:29:34
$(window).keydown(function (e){
if (e.ctrlKey) alert("control");
});修饰符键列表:
e.ctrlKey
e.altKey
e.shiftKeyhttps://stackoverflow.com/questions/21425577
复制相似问题