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 ブロックのコンテンツを変更 (またはスタイリングなど) したいと考えています。問題はfoo、ドキュメント (コメント行) を観察すると実際に変更がトリガーされるのに対し、id を観察しても何のアクションにもつながらないことです。foodiv ブロックを入力タグに置き換えると、たとえば

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

その後、イベントは正しくトリガーされます。バグですか?

4

2 に答える 2

1

これは、イベントが要素内で発生していないためです。そのため、要素内でイベントを聞く (聞く) こと<div>はできません。タグ付きのブロックobserveの場合、イベントは実際にはその要素内で発生します (入力にユーザー フォーカスがあると思いますが、ここでは関係ありません)。いいえ、それはバグではありません。<div><input>

キーイベントはさまざまな要素で発生するため (さまざまなブラウザーがさまざまな方法でこれを管理します)、キーイベントはすべてドキュメントにバブルアップします (イベントの伝播を停止しない限り)

于 2013-02-14T19:45:23.050 に答える