加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

html – 如何在div之间实现箭头键导航

发布时间:2020-12-14 16:44:45 所属栏目:资源 来源:网络整理
导读:我有以下div列表 div id="multi-picker" div id="opt1" input type="checkbox" Option 1 /div div id="opt2" input type="checkbox" Option 2 /div etc.../div 一切正常,但我对键盘导航不满意.要从opt1导航到opt2,我需要按Tab键.理想情况下,我想将选项视为选
我有以下div列表
<div id="multi-picker">
  <div id="opt1">
     <input type="checkbox">  Option 1
  </div>
  <div id="opt2">
     <input type="checkbox">  Option 2
  </div>
  etc...
</div>

一切正常,但我对键盘导航不满意.要从opt1导航到opt2,我需要按Tab键.理想情况下,我想将选项视为选择并使用向上/向下箭头导航.可以这样做吗?

另外…
是否有任何方法可以使用带有复选框样式的选项进行多选,以反映每个选项的选择状态?

解决方法

我认为你需要javascript并使用插件是一种更简单的方法来完成任务和维护跨浏览器功能.但是,这里有一个 fiddle,我认为,只需使用javascript即可.它定义了select元素的附加属性,并使用onkeydown函数来处理元素之间的导航.
function keyPressed(e) {
    var srcElement = e.target;    // get the element that fired the onkeydown function
    var dataset = false;
    var selectList = false;
    var next = "";
    var prev = "";
    if (srcElement.dataset) {        // can we use HTML5 dataset?
        dataset = true;              // remember for later
        // is this an element for which we care
        if (srcElement.dataset.selectlist == 'true') {
            selectList = true;
        }
    } else {    // can't use HTML5 dataset,use getAttribute
        if (srcElement.getAttribute('data-selectlist') == 'true') {
            selectList = true;
        }
    }
    // is it a select element and the user pressed either up arrow or down arrow
    if (selectList && (e.keyCode == '38' || e.keyCode == '40')) {
        // get the next and prev navigation options for this element
        if (dataset) {
            next = srcElement.dataset.next;
            prev = srcElement.dataset.prev;
        } else {
            next = srcElement.getAttribute('data-next');
            prev = srcElement.getAttribute('data-prev');
        }
        // up arrow was pressed and a prev element is defined
        if (e.keyCode == '38' && prev != '') {
            document.getElementById(prev).focus();
        }
        // down arrow was pressed and a next element is defined
        if (e.keyCode == '40' && next != '') {
            document.getElementById(next).focus();
        }
        // don't do native processing of the up or down arrow (page scrolling)
        e.preventDefault;
    }
}
document.onkeydown = keyPressed;

这是包含其他元素的新html:

<div id="multi-picker">
    <div id="opt1">
        <input id="select1" type="checkbox" data-selectlist="true" data-prev="" data-next="select2">  Option 1
    </div>
    <div id="opt2">
        <input id="select2" type="checkbox" data-selectlist="true" data-prev="select1" data-next="">  Option 2
    </div>
</div>

此代码非常特定于所提出的问题,虽然它可以解决问题,但使用通用插件可能会更好,这样可以在整个环境中实现更广泛的应用.您可能还会遇到与用户期望向下和向上箭头键相关的问题以及通过拦截它们所做的事情相关的问题.

根据我的经验,我遇到了一些问题,其中不同的浏览器甚至不同的最终用户平台对应用程序呈现不同的行为,使得实现一致性不稳定.许多插件旨在消除这种不一致性,并提供更清晰,更直观的界面.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读