如何更改元素“B”的类名onFocus元素“A”

发布于 2024-11-01 13:44:38 字数 171 浏览 4 评论 0原文

我正在构建一个无障碍网站,以便为残障人士播放 YouTube 视频。我使用 onfocus (并更改类名)而不是使用 :focus ,以便它与更多浏览器兼容,以便对所选链接提供视觉反馈。

我想在文本/img 链接获得键盘焦点时设置列表项背景的样式 - 这可能吗?

非常感谢,

迈克

I'm building an accessible site to play YouTube videos for people with disabilities. I'm using onfocus (and changing classnames) rather than use :focus so that its compatible with more browsers to give visual feedback on the link selected.

I'd like to style the list item background when a text/img link gets keyboard focus - is this possible?

Many thanks,

Mike

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

悲歌长辞 2024-11-08 13:44:39

我不知道

  • 是否可以通过编程方式获得(键盘)焦点,但我可以 向您展示如何以编程方式更改类名
  • [根据评论进行编辑]如果您指的是href,这里是一个工作示例。使用 tab 跳转到下一个 href。

    "use strict";  
    (function () {
    
      var refs = document.getElementsByTagName('a'); 
      document.addEventListener('focus', hoverClass, true);
    
      refs[0].focus();
      setTimeout(emulateHover, 800);
    
      function emulateHover() {
         if (!document.activeElement.href) {return clearTimeout(0);}
         var index = parseInt(document.activeElement.href.split(/#/)[1], 10);
         var activeElement = refs[index] || refs[0];
         if (activeElement) { activeElement.focus(); }
         setTimeout(emulateHover, 800);
      }
    
      function hoverClass(evt){
          var srcEl = evt.srcElement || evt.target;
          var i = refs.length;
          while(i--) { refs[i].className = 'a'; }
          if (srcEl && !/a/i.test(srcEl.tagName)) { return clearTimeout(0); }
          var isA = /a$/i.test(srcEl.className);
          srcEl.className = isA ? 'b' : 'a';
      }
      
    }());
    body {
      font: normal 12px/15px verdana, arial;
    }
    .a {background-color: #eee; transition: all 0.5s 0s}
    .b {background-color: green; color:white; transition: all 0.5s 0s}
    a {text-decoration: none;}
    <ul>
        <li><a id="first" class="a" href="#1">line 1</a></li>
        <li><a class="a" href="#2">line 2</a></li>
        <li><a class="a" href="#3">line 3</a></li>
        <li><a class="a" href="#4">line 4</a></li>
        <li><a class="a" href="#5">line 5</a></li>
        <li><a class="a" href="#6">line 6</a></li>
    </ul>

    I don't know if <li> can get (keyboard) focus programmatically, but I can show you how to change classnames programmatically.

    [edit based on comment] If it's hrefs you mean, here is a working example. Use tab to jump to the next href.

    "use strict";  
    (function () {
    
      var refs = document.getElementsByTagName('a'); 
      document.addEventListener('focus', hoverClass, true);
    
      refs[0].focus();
      setTimeout(emulateHover, 800);
    
      function emulateHover() {
         if (!document.activeElement.href) {return clearTimeout(0);}
         var index = parseInt(document.activeElement.href.split(/#/)[1], 10);
         var activeElement = refs[index] || refs[0];
         if (activeElement) { activeElement.focus(); }
         setTimeout(emulateHover, 800);
      }
    
      function hoverClass(evt){
          var srcEl = evt.srcElement || evt.target;
          var i = refs.length;
          while(i--) { refs[i].className = 'a'; }
          if (srcEl && !/a/i.test(srcEl.tagName)) { return clearTimeout(0); }
          var isA = /a$/i.test(srcEl.className);
          srcEl.className = isA ? 'b' : 'a';
      }
      
    }());
    body {
      font: normal 12px/15px verdana, arial;
    }
    .a {background-color: #eee; transition: all 0.5s 0s}
    .b {background-color: green; color:white; transition: all 0.5s 0s}
    a {text-decoration: none;}
    <ul>
        <li><a id="first" class="a" href="#1">line 1</a></li>
        <li><a class="a" href="#2">line 2</a></li>
        <li><a class="a" href="#3">line 3</a></li>
        <li><a class="a" href="#4">line 4</a></li>
        <li><a class="a" href="#5">line 5</a></li>
        <li><a class="a" href="#6">line 6</a></li>
    </ul>

    凉城 2024-11-08 13:44:39

    要设置类的新值,您可以执行以下操作:

    element.className = "A";
    

    如果您使用 jQuery,您可以:

    $(element).addClass("A");
    $(element).removeClass("B");
    

    to set a new value of the class you can do:

    element.className = "A";
    

    if you use jQuery you can:

    $(element).addClass("A");
    $(element).removeClass("B");
    
    躲猫猫 2024-11-08 13:44:39

    我认为对像列表这样的 HTML 元素使用焦点(如果有效的话从未尝试过)听起来不太好。而是使用悬停。

    我会跟随以下;悬停、鼠标输入、鼠标悬停。

    $("ul.someclass > li").mouseenter(function() {
        $(this).addClass("current");
      }).mouseleave(function() {
        $(this).removeClass("current");
      });
    

    欲了解更多信息;

    http://api.jquery.com/mouseover/

    http://api.jquery.com/hover/

    I don't think it sounds nice to use focus (never tried if it works) for such HTML elements like list. Instead use hover.

    I would go with following ; hover, mouseenter, mouseover.

    $("ul.someclass > li").mouseenter(function() {
        $(this).addClass("current");
      }).mouseleave(function() {
        $(this).removeClass("current");
      });
    

    For more information;

    http://api.jquery.com/mouseover/

    http://api.jquery.com/hover/

    再浓的妆也掩不了殇 2024-11-08 13:44:39

    找到了一个看似可行的凌乱方法:

    <?php while ($row = mysql_fetch_assoc($result)) {
    
    $js  =  "<script language=\"javascript\">";
    $js .=  "function changeClass$id(){";
    $js .=  "document.getElementById(\"$id\").setAttribute(\"class\", \"popfocus\");}";
    $js .=  "function changeClass1$id(){";
    $js .=  "document.getElementById(\"$id\").setAttribute(\"class\", \"pop\");}";
    $js .=  "</script>";
    
    echo $js;
    echo "<li><div id=\"$id\" class=\"pop\">\n";
    echo "<a 
    
    onFocus=\"changeClass$id()\" 
    onBlur=\"changeClass1$id()\"
    onMouseover=\"changeClass$id()\" 
    onMouseout=\"changeClass1$id()\"
    

    Found a messy method that seems to work ok:

    <?php while ($row = mysql_fetch_assoc($result)) {
    
    $js  =  "<script language=\"javascript\">";
    $js .=  "function changeClass$id(){";
    $js .=  "document.getElementById(\"$id\").setAttribute(\"class\", \"popfocus\");}";
    $js .=  "function changeClass1$id(){";
    $js .=  "document.getElementById(\"$id\").setAttribute(\"class\", \"pop\");}";
    $js .=  "</script>";
    
    echo $js;
    echo "<li><div id=\"$id\" class=\"pop\">\n";
    echo "<a 
    
    onFocus=\"changeClass$id()\" 
    onBlur=\"changeClass1$id()\"
    onMouseover=\"changeClass$id()\" 
    onMouseout=\"changeClass1$id()\"
    
    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文