我发现prototype.js库提供了事件处理机制,但我不知道下面的代码片段出了什么问题:
<div>
<div id="foo">Bla-bla</div>
</div>
<script type="text/javascript">
function onFooKeyup(e)
{
var element = e.element();
if (e.keyCode == Event.KEY_ESC)
element.innerHTML="TEST";
}
//document.observe('keydown', onFooKeyup);
$('foo').observe('keydown', onFooKeyup);
</script>
基本上,我想在用户按下escape按钮时更改某些div块的内容(或进行样式设置等)。问题是,观察foo
id不会导致任何操作,而观察文档(注释行)确实会触发更改。如果我用输入标签替换foo
div块,例如
<div><input type="text" id="foo" /></div>
则事件将被正确地触发。是虫子吗?
这是因为事件不是在<div>
元素内部发起的,所以不能在那里observe
它(监听它)。在带有<input>
标记的<div>
块的情况下,事件实际上起源于该元素内部(我认为,如果输入以用户为中心,但与此无关)。所以不,这不是一个bug。
只需在文档级别捕捉键盘事件,因为键事件将源自不同的元素(不同的浏览器以不同的方式管理),但它们都会出现在文档中(除非您停止事件的传播)。
伙计,我认为唯一的错误是因为你对jQuery说要寻找一个名为"foo"的标签,然后将"keypress"事件绑定到它
$('#foo').observe ....