2013-02-14 39 views
1

我發現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> 

基本上我想更改的內容(或做造型等)某些div區塊當用戶按退出按鈕。問題是,觀察foo id不會導致任何操作,而觀察文檔(註釋行)確實會觸發更改。如果我用輸入標籤替換我的foo div塊,例如

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

然後事件將被正確觸發。這是一個錯誤嗎?

回答

1

這是因爲事件還沒有發生在<div>元素裏面,所以你不能在observe那裏(聽它)那裏。對於<input>標籤,<div>塊的情況下,該事件實際上是源於該元素內部(如果輸入具有用戶焦點,我認爲,但在此不重要)。所以不,這不是一個錯誤。

正好趕上鍵盤事件在文檔級別,因爲關鍵事件將在不同的元素起源(不同的瀏覽器不同的方式管理這一點),但他們都將泡到文件(除非你停止事件的傳播) 。

0

男人,我認爲唯一的錯誤是因爲你說jQuery去尋找一個名爲'foo'的標籤,然後將'keypress'事件綁定到它。如果你想要它搜索你的id'foo',你應該做以下的事情

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