我想弄清楚为什么以下不起作用。
我正在设置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/
答案 0 :(得分:1)
来自http://api.jquery.com/trigger/,重点补充:
任何事件处理程序附加.on()或其快捷方法之一 在相应事件发生时触发。他们可以解雇 但是,使用.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);
答案 1 :(得分:1)
jQuery的trigger
only triggers jQuery-attached events。触发实际的DOM事件比较棘手,键盘事件模块仍然是工作草案:
var e = document.createEvent('KeyboardEvents');
e.initKeyboardEvent('keydown');
document.dispatchEvent(e);
initKeyboardEvent
的论据在MSDN上。 Firefox使用initKeyEvent
。