代码之家  ›  专栏  ›  技术社区  ›  Frank Schwieterman

<ul>元素如何接收焦点事件?

  •  5
  • Frank Schwieterman  · 技术社区  · 15 年前

    我正在运行以下代码来跟踪在HTML文档中获得焦点的每个控件的标记名:

    $(function() {
        $("*").bind("focus", function() {
            console.log("tabbed " + this.tagName);
        });
    });
    

    当这运行时,我可以观察Firebug控制台,并看到它跟踪标记,如“a”和“input”,我希望通过文档标签获得焦点。不过,它还跟踪一个“ul”标签。文档有多个ul标签,只有这一个ul标签似乎得到了关注。

    你知道这是怎么回事吗?具有focus的ul标签没有属性(name、id等),所以我不知道它是如何被其他脚本修改的。

    (在Firefox中运行。我正在查看的页面非常大,所以我不包括源代码,但是ul标记没有属性,包含一些lis,其中一个lis包含一个标记)。

    根据 Which HTML elements can receive focus? 可能是因为某些脚本在该ul标记上设置了tabindex。但我找不到这样的剧本。

    请注意,我并不是想弄清楚如何使ul聚焦,而是弄清楚为什么它是可聚焦的。

    2 回复  |  直到 15 年前
        1
  •  10
  •   Juraj Blahunka    15 年前

    处理焦点完全取决于浏览器的实现。

    通过添加 TAB顺序 财产:

    <ul tabindex="1">
        <li>item</li>
        <li>item</li>
    </ul>
    
    <ul tabindex="2">
        <li>item</li>
        <li>item</li>
    </ul>
    

    这个“黑客”应该强制 UL 要素 可聚焦的 (为我工作)

        2
  •  0
  •   Januz    15 年前

    如果ul中的一个lis包含一个标记,那么焦点事件(从a)可能传播到ul。