当鼠标悬停在文档的某个部分并按下该键时,我想触发一个键事件。我尝试了以下方法:
$(document).ready(function(){
$("#main_content").keydown(function(e) {
if(e.which == 40) {
alert("button Down");
return false;
}
});
});
我预计这不起作用,但我想不出另一种方法。
JSFIDDLE:http://jsfiddle.net/c57nkb9y/
答案 0 :(得分:2)
创建一个变量存储鼠标状态,然后在鼠标进入并离开时更新它:
let mouseIsOver = false
const content = document.getElementById('main_content')
content.addEventListener('mouseenter', () => {
mouseIsOver = true
})
content.addEventListener('mouseleave', () => {
mouseIsOver = false
})
document.body.addEventListener('keydown', event => {
// When key pressed, check mouseIsOver
if (mouseIsOver && event.which === 40) {
alert('Button Down!')
}
})
附加和分离 KeyPress侦听器:
const content = document.getElementById('main_content')
function keyPressHandler() {
if (event.which === 40) {
alert('Button Down!')
}
}
content.addEventListener('mouseenter', () => {
document.body.addEventListener('keypress', keyPressHandler)
})
content.addEventListener('mouseleave', () => {
document.body.removeEventListener('keypress', keyPressHandler)
})
答案 1 :(得分:0)
正如您可以阅读here一样,将键盘事件侦听器附加到不可聚焦的元素(如#main_content
div)是没用的。相反,我建议您将它们附加到window
对象或body
元素。
kube的答案应该可以正常运行,但是当你离开主要div时,你真的不需要一直听到keydown事件。我提议这个:
$(document).ready(function () {
$("#main_content").mouseover(armKeyEvent);
$("#main_content").mouseout(shutdownKeyEvent);
function armKeyEvent() {
$(window).keydown(function(e) {
if(e.which == 40) {
alert("button Down");
return false;
}
});
}
function shutdownKeyEvent() {
$(window).unbind('keydown');
}
});
答案 2 :(得分:-2)
您可以在keypress
之后添加mouseenter
个活动,并在mouseleave
上将其删除:
$(document).ready(function () {
$('#main_content').mouseenter(function () {
console.log(this)
$(document).keypress(function (e) {
var code = e.keyCode || e.which;
if (code == 40) {
alert("button Down");
return false;
}
});
}).mouseleave(function () {
$(document).on("keypress", function () {});
});
});