1

我发现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 块的内容(或做样式等)。问题是观察fooid 不会导致任何操作,而观察文档(注释行)确实会触发更改。foo如果我用输入标签替换我的div 块,例如

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

那么事件将被正确触发。它是一个错误吗?

4

2 回答 2

1

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

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

于 2013-02-14T19:45:23.050 回答
0

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

$('#foo').observe ....
于 2013-07-17T18:03:47.737 回答