我发现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>
基本上我想在用户按下退出按钮时更改某个div块的内容(或做样式等)。问题是观察foo
id不会导致任何操作,而观察文档(注释行)确实会触发更改。如果我用输入标记替换我的foo
div块,例如
<div><input type="text" id="foo" /></div>
然后将正确触发事件。这是一个错误吗?
答案 0 :(得分:1)
这是因为事件并非源自<div>
元素,所以你不能在那里observe
(听它)。对于带有<div>
标记的<input>
块,事件实际上是在该元素内部发生的(如果输入具有用户焦点,我认为,但这里不相关)。所以不,这不是一个错误。
只需抓住文档级的键盘事件,因为关键事件将来自不同的元素(不同的浏览器以不同的方式管理它)但它们都会冒泡到文档中(除非你停止事件的传播。)
答案 1 :(得分:0)
Man,我认为唯一的错误是因为你说jQuery要查找名为'foo'的标签,然后将'keypress'事件绑定到它。如果您希望它搜索您的ID“foo”,您应该执行以下操作
$('#foo').observe ....