代码之家  ›  专栏  ›  技术社区  ›  blu

为什么这个原型代码是这样工作的?

  •  0
  • blu  · 技术社区  · 15 年前

    这是我的HTML:

    (注意:我并不是为了简单起见而使用A上的背景图像来向某人展示这是如何工作的)

    <div class="foo">
        <ul>
            <li><a href="#" class="bar"><img src="bar.gif" /></a></li>
            <li><a href="#" class="baz"><img src="baz.gif" /></a></li>
        </ul>
    </div>
    

    我的javascript:

    <script type="text/javascript">
        Event.observe(window, 'load', function() {
            $$('.foo a').each(function(a) {
                alert(a); // this is the anchor
                a.observe('click', fooClick);
        });
    
        function fooClick(event) {
            alert(event.element()); // this is the img
        }
    </script>
    

    为什么fooclick中的元素是图像而不是锚?我该怎么做才能使用图像。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Russ Cam    15 年前

    当单击处理程序绑定到锚时,将在图像上引发单击事件。该事件使DOM冒泡,调用锚上的事件处理程序。 event.element() 是引发事件的元素

        2
  •  2
  •   Matt Molnar    15 年前

    对你的问题有些困惑,“为什么fooclick中的元素是图像而不是锚?我应该如何使用图像。”

    你的意思是“锚”在最后一句话?如果是,则event.element()是单击的实际元素,而不一定是分配了处理程序的元素。如果您需要锚定,可以执行类似alert(event.element().up(“a”))的操作。

        3
  •  0
  •   NilColor    15 年前

    如果您将使用图像作为背景,您应该得到一个锚定为event.element()。 我认为event.element()与event.target是相同的,这是一个首先接收到事件的元素,从中这个事件在dom中冒泡。所以移除(移动到css/background image)或检查element()父级。