prototype.js库中的事件处理



我发现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不会导致任何操作,而观察文档(注释行)确实会触发更改。如果我用输入标签替换foodiv块,例如

  <div><input type="text" id="foo" /></div>

则事件将被正确地触发。是虫子吗?

这是因为事件不是在<div>元素内部发起的,所以不能在那里observe它(监听它)。在带有<input>标记的<div>块的情况下,事件实际上起源于该元素内部(我认为,如果输入以用户为中心,但与此无关)。所以不,这不是一个bug。

只需在文档级别捕捉键盘事件,因为键事件将源自不同的元素(不同的浏览器以不同的方式管理),但它们都会出现在文档中(除非您停止事件的传播)。

伙计,我认为唯一的错误是因为你对jQuery说要寻找一个名为"foo"的标签,然后将"keypress"事件绑定到它

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

最新更新