prototype.js库中的事件处理

时间:2013-02-14 19:33:37

标签: javascript prototypejs

我发现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>

然后将正确触发事件。这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

这是因为事件并非源自<div>元素,所以你不能在那里observe(听它)。对于带有<div>标记的<input>块,事件实际上是在该元素内部发生的(如果输入具有用户焦点,我认为,但这里不相关)。所以不,这不是一个错误。

只需抓住文档级的键盘事件,因为关键事件将来自不同的元素(不同的浏览器以不同的方式管理它)但它们都会冒泡到文档中(除非你停止事件的传播。)

答案 1 :(得分:0)

Man,我认为唯一的错误是因为你说jQuery要查找名为'foo'的标签,然后将'keypress'事件绑定到它。如果您希望它搜索您的ID“foo”,您应该执行以下操作

$('#foo').observe ....