由于某种原因,我的自定义"LastPause", (long) (time(NULL) - mem->lastpause),
不会冒泡。
我参加处理按住键:
KeyboardEvent
然后,我可以使用document.addEventListener('DOMContentLoaded', function () {
var isPressed = false;
var startTimeStamp;
document.addEventListener('keydown', function (e) {
if (!isPressed) {
startTimeStamp = e.timeStamp;
isPressed = true;
}
});
document.addEventListener('keyup', function (e) {
isPressed = false;
var eventDuration = e.timeStamp - startTimeStamp;
var _e = new KeyboardEvent('keyheld', {
bubbles: true,
cancelBubble: false,
cancelable: true,
char: e.char,
charCode: e.charCode,
key: e.key,
keyCode: e.keyCode,
which: e.which,
shiftKey: e.shiftKey,
ctrlKey: e.ctrlKey,
altKey: e.altKey,
metaKey: e.metaKey
});
Object.defineProperty(_e, 'detail', {
value: {
duration: eventDuration
},
enumerable: true
});
document.dispatchEvent(_e);
});
});
附带的侦听器来处理keyheld
事件。尽管如此,附加到任何东西(在 body 下面)的侦听器根本不会触发:
document
即使提供document.addEventListener('DOMContentLoaded', function () {
document.body.addEventListener('keyheld', function (e) {
console.log('KEY HELD: ', e.detail.duration, e);
});
});
作为true
的第三个参数,上面的代码也不起作用,即使是陌生人,在捕获而不是冒泡时也应触发监听器。
这可能是什么问题?
答案 0 :(得分:0)
调用document.dispatchEvent(event)
时,事件is dispatched with its target set to document
是DOM层次结构中的顶级节点,如in an illustration here所示。
该事件通常会bubble到目标元素的父级,但是当目标是document
时,就没有父级(document.parentNode === null
)。出于相同的原因,尝试在身体上注册捕获侦听器无效。
您可能希望将其分发到原始事件的目标:e.target.dispatchEvent(_e)
。