这个问题之前可能已经被问过,但我无法找到合适的搜索短语来定位它,无论是在这里还是在 intertubes 上。
我有一个使用键盘的游戏网页,所以使用 jQuery 我在文档中设置了处理程序:
$(document).keydown(myKeydown);
$(document).keyup(myKeyup);
$(document).blur(myBlur);
但是现在输入字段中写入的任何文本都会被文档事件处理程序窃取,并且只有在文档处理程序中未使用字符时才会到达输入。这些处理程序本质上如下所示:
function myKeydown(event)
{
if (event.which == 65)
{
console.log('a pressed');
return false;
}
return true;
}
现在假设我有一个文本输入框;如果我按下除“a”以外的任何键,它会显示在输入中,而不是“a”(因为 myKeydown 通过返回 false 来“吃掉”它)。在任何情况下我都可以返回 true,但是如果没有输入框被聚焦,我会得到奇怪的东西,比如“键入时搜索”,如果启用的话。
我试图为输入框添加处理程序:
input.keydown(function() { console.log('down'); return false; });
input.keyup(function() { console.log('up'); return false; });
input.blur(function() { console.log('blur'); return false; });
使用此代码,我得到了 console.logs,但当然键不会到达盒子(因为我没有对印刷机做任何事情)。我可以将这些事件发送到某个地方,以便相应的键出现在输入框中吗?
注意:有些人建议使用event.stopPropagation()
而不是return false
. jQuery 文档说:
从处理程序返回 false 等效于在事件对象上调用 .preventDefault() 和 .stopPropagation()。”
这正是我想要的:为了防止“输入时搜索”启动,我必须阻止默认操作,即在输入上输入并在页面上“输入时搜索”。
(此外,由于某种原因,keydown
事件处理程序在 Firefox 最新版本上没有 stopPropagation() 函数。)