2013-06-19 134 views
1

我想弄清楚为什么以下不起作用。Keydown事件不被事件处理程序拾起

我正在设置一个​​事件处理程序,然后触发事件。但处理程序没有检测到它。

如果有人能够赐教我!

function onKeyDown(event) 
{ 
alert('keydown'); 
} 

document.addEventListener('keydown', onKeyDown, false); 

var keydown = jQuery.Event('keydown', {which:38, keyCode:38}); 

$(document).keydown(); 
$(document).trigger(keydown); 

的jsfiddle:http://jsfiddle.net/4bf3z/

回答

1

从​​,加上强调:

任何事件处理程序()或它的快捷方式的方法 一个附有。对被触发时,相应的事件发生。但是,可以使用.trigger()方法手动触发 。对.trigger() 的调用按照与用户自然触发的事件 相同的顺序执行处理程序。

所以,它的工作原理如果附加处理程序使用jQuery,而不是纯JavaScript预期:

function onKeyDown(event) 
{ 
    alert('keydown'); 
} 

$(document).on('keydown', onKeyDown); // <---- 

var keydown = jQuery.Event('keydown', {which:38, keyCode:38}); 

$(document).keydown(); 
$(document).trigger(keydown); 
+0

谢谢。我结束了使用这个解决方案,并取代香草JavaScript代码。原因是因为调整event.keyCode所需的调整和解决方法太多,使用jQuery只是更简单的解决方案。 – Vigrond

+0

@ Vigrond:顺便说一句,如果你可以派遣一个事件来解决实际问题,你应该几乎肯定只是调用该函数。 – Ryan