我正在使用 Hakim El Hattab 的 reveal.js 制作演示幻灯片。我已将文本区域添加到幻灯片中。在文本区域内,我想防止在按下某些键时调用 javascript 函数,并恢复默认的键入行为。例如,从 reveal.js 的以下代码行可以看出,当按下 p
时,将调用函数 navigatePrev()
。我想阻止此函数被调用,只是希望在按下 p
时在文本区域中键入 p
。我怎样才能使用 jquery 做到这一点?我尝试添加以下脚本,但这没有帮助。
<script>
$(document).keydown(function (e) {
if ($(e.target).is('textarea')) {
e.stopPropagation();
}
})
</script>
仍然会调用 reveal.js 中定义的函数。使用 return false
代替 e.stopPropagation()
也无济于事。我还在我的页面的最后包含了上面的 jQuery 行(在调用 reveal.js 之后)。
谢谢。
来自 reveal.js 的相关行
function onDocumentKeyDown(event) {
// FFT: Use document.querySelector( ':focus' ) === null
// instead of checking contentEditable?
// Disregard the event if the target is editable or a
// modifier is present
if (event.target.contentEditable != 'inherit' || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
var triggered = false;
switch (event.keyCode) {
// p, page up
case 80: case 33: navigatePrev(); triggered = true; break;
// n, page down
case 78: case 34: navigateNext(); triggered = true; break;
// h, left
case 72: case 37: navigateLeft(); triggered = true; break;
// l, right
case 76: case 39: navigateRight(); triggered = true; break;
// k, up
case 75: case 38: navigateUp(); triggered = true; break;
// j, down
case 74: case 40: navigateDown(); triggered = true; break;
// home
case 36: navigateTo(0); triggered = true; break;
// end
case 35: navigateTo(Number.MAX_VALUE); triggered = true; break;
// space
case 32: overviewIsActive() ? deactivateOverview() : navigateNext(); triggered = true; break;
// return
case 13: if (overviewIsActive()) { deactivateOverview(); triggered = true; } break;
}
}
最佳答案
您的 keydown 事件绑定(bind)的问题在于它绑定(bind)到最后接收事件的文档(一旦为时已晚而无法阻止事件在 DOM 树中向上冒泡)。
相反,尝试在每次创建事件时将事件直接绑定(bind)到文本区域:
// create text area & append to slide container
createTextAreaOnSlideContainer();
// bind an event handler to the element
$('textarea.slideTextArea').keydown( function(e) {
e.stopPropagation();
});
这将在事件冒泡(传播)到正在监听要按下的键的文档之前停止该事件
关于javascript - 禁用 textarea 中由 javascript 定义的 keydown 事件并恢复默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12232626/