我正在处理按键事件。我正在使用Safari浏览器并寻找可在任何浏览器上运行的功能。但是e.keyCode总是返回undefined而e.which总是返回0.请找代码beloe:
$("a,input,button,select,textarea").live('blur',
function(e) {
e.preventDefault();
var key= e.keyCode || e.which;
console.log(key);
});
有没有人建议这段代码有什么不对?我想获得按键事件的关键代码。感谢任何帮助。
答案 0 :(得分:1)
您将选择器绑定到错误的事件 - 您应该使用类似keypress
的内容来捕获按键事件
$("a,input,button,select,textarea").live('blur keypress'
function(e) {
if (e.type == 'keypress') {
e.preventDefault();
var key= e.keyCode;
console.log(key);
}
if (e.type == 'blur') {
e.preventDefault();
// do smthg
}
}
});
答案 1 :(得分:1)
您希望检测输入丢失的焦点是否属于某个键...
问题是blur
事件根本与键无关。输入失去焦点时发生的事件。
即使"原因"失去的焦点似乎是一个"标签",它不是事件的观点。
在按键击中,会发生几个事件:
keydown
keypress
keyup
如果密钥是"标签"则会出现模糊,因为浏览器会为您执行此操作。这不是关键的直接影响。
因此,blur
发生在.which
之后,并且不会传输密钥keydown
。
现在要检测输入是否由于某个键而失去焦点,您必须等待一段时间"并测试有关键事件的输入是否仍然是焦点。
要禁用特定密钥(及其效果),首选return false
事件,因为密钥尚未打印"然而。是$("input,textarea").on('keydown', function(e) {
//e.preventDefault();
var that = $(this);
var key = e.which;
console.clear();
console.log(key);
setTimeout(function(){
if(that.is(":focus")){
console.log("Input still in focus.");
}else{
console.log("Input lost focus.");
}
},10);
// To disable a key
if(key==70){ // key "f"
console.log("That funny letter is forbidden");
return false
}
});
的时间。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Try keyboard arrows, tab.<br>
The letter "f" is disabled... For fun.<br>
<br>
<input type="text" placeholder="Type something!"><br>
<br>
<textarea placeholder="Type something!"></textarea>
&#13;
{{1}}&#13;