el-Cascader 中div上绑定keyDown事件

news2024/11/26 20:38:18

keydown,keyup,keypress

事件默认是给页面上可以聚焦的元素绑定键盘事件,例如input输入框,点击输入框即代表聚焦在该元素上。那么想要给div或者其他不能聚焦的元素上使用键盘事件怎么处理呢?这里用到tabindex属性。

它接受一个整数作为值,具有不同的结果,具体取决于整数的值:

  • tabindex=负值 (通常是 tabindex=“-1”),表示元素是可聚焦的,但是不能通过键盘导航来访问到该元素,用 JS
    做页面小组件内部键盘导航的时候非常有用。
  • tabindex=“0” ,表示元素是可聚焦的,并且可以通过键盘导航来聚焦到该元素,它的相对顺序是当前处于的 DOM 结构来决定的。
  • tabindex=正值,表示元素是可聚焦的,并且可以通过键盘导航来访问到该元素;它的相对顺序按照 tabindex
    的数值递增而滞后获焦。如果多个元素拥有相同的 tabindex,它们的相对顺序按照他们在当前 DOM 中的先后顺序决定。
<div class="key-even" id="editor" tabindex="-1">
  keyDown
</div>

添加上 tabindex 属性后,此时div表示可以聚焦,但是想要触发键盘事件还需要调用 dom 的 focus() 方法,表示页面聚焦在该元素上,这样就可以触发键盘事件了。

const dom = document.getElementById('editor')
dom.addEventListener('click', this.domClick(dom))
dom.addEventListener('keydown', this.keyDown)
 
domClick(dom) {
  dom.focus()
},
keyDown(e) {
  console.log(e.keyCode)
}

绑定事件的方式可以改变,主要是讲述 tabindex 属性的用法及作用。

el-Cascader 源码解读:最后一张图片中,li中绑定的tabindex,使的li可以聚焦,

packages/cascader-panel/src/cascader-panel.vue

<template>
  <div
  :class="[
    'el-cascader-panel',
    border && 'is-bordered'
  ]"
    @keydown="handleKeyDown">
    <span>这个地址:element-ui/packages/cascader-panel</span>
    <cascader-menu
      ref="menu"
      v-for="(menu, index) in menus"
      :index="index"
      :key="index"
      :nodes="menu"></cascader-menu>
  </div>
</template>
    handleKeyDown(e) {
      console.log('操作键盘是这里---》', e.target)
      const { target, keyCode } = e;

      switch (keyCode) {
        case KeyCode.up:
          const prev = getSibling(target, -1);
          focusNode(prev);
          break;
        case KeyCode.down:
          const next = getSibling(target, 1);
          focusNode(next);
          break;
        case KeyCode.left:
          const preMenu = this.$refs.menu[getMenuIndex(target) - 1];
          if (preMenu) {
            const expandedNode = preMenu.$el.querySelector('.el-cascader-node[aria-expanded="true"]');
            focusNode(expandedNode);
          }
          break;
        case KeyCode.right:
          const nextMenu = this.$refs.menu[getMenuIndex(target) + 1];
          if (nextMenu) {
            const firstNode = nextMenu.$el.querySelector('.el-cascader-node[tabindex="-1"]');
            focusNode(firstNode);
          }
          break;
        case KeyCode.enter:
          checkNode(target);
          break;
        case KeyCode.esc:
        case KeyCode.tab:
          this.$emit('close');
          break;
        default:
          return;
      }
    },

packages/cascader-panel/src/cascader-node.vue
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea maven窗口 展示不分级 maven层级混乱

1. 正在写分布式im 开源项目&#xff1a;nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate&#xff08;长连接服务&#xff09; logic &#xff08;业务&#xff09; lsb &#xff08;负载均衡&#xff09;store&#xff08;存储&#xff09; - Gitee.com …

redis - 学习笔记

一、NOSQL 1、概述 泛指非关系型数据库 关系型数据库&#xff1a;表格、行、列 2、特点 方便拓展大数据量&#xff0c;高性能&#xff08;1s写8w次&#xff0c;读取11w&#xff0c;NOSQL的缓存记录级&#xff0c;是一种细粒度的缓存&#xff0c;性能比较高&#xff09;数据…

网安第二天笔记

ssh 22端口 账号密码登陆、证书登录 smtp 25端口 邮件协议 DNS 53 DHCP 67 68端口 四个包 1.DHCP服务器&#xff1a;服务器管理IP地址池和配置参数 2.客户端请求&#xff1a;发送DHCP广播请求&#xff0c;discover消息 3.DHCP服务器回应&#xff1a;收到discover会回复offer…

Vue2.x和Vue3.x面试常问知识点-面试题

SPA单页面的理解&#xff0c;它的优缺点分别是什么&#xff1f; 是什么 SPA&#xff08; single page application &#xff09;仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。 一旦页面加载完成&#xff0c;SPA 不会因为用户的操作而进行页面的重新加载或跳转 而…

数据结构与算法——链栈及基本操作(包含入栈和出栈)详解

链栈&#xff0c;即用链表实现栈存储结构。 链栈的实现思路同顺序栈类似&#xff0c;顺序栈是将数顺序表&#xff08;数组&#xff09;的一端作为栈底&#xff0c;另一端为栈顶&#xff1b;链栈也如此&#xff0c;通常我们将链表的头部作为栈顶&#xff0c;尾部作为栈底&#…

C语言程序设计——文件操作

一、文件的打开和关闭 1. 文件指针 每个被使用的文件&#xff0c;都会在内存中开辟一个相应的文件信息区&#xff0c;用来存储文件的相关信息&#xff08;文件名、文件状态、文件位置……&#xff09;。 这些信息是保存在一个结构体变量中&#xff0c;该结构体类似是由系统声明…

选择优秀的敏捷项目管理工具:指南与考虑因素!

如何选择优秀的敏捷项目管理工具?敏捷项目管理工具是用于管理和执行敏捷项目的任何工具。在最基本的形式中&#xff0c;白板和便签可以被认为是敏捷管理工具。敏捷工具和其他项目管理工具之间的主要区别在于它们处理敏捷框架的能力&#xff0c;例如看板和Scrum。 换句话说&…

OpenAI推动人工智能治理向前发展

OpenAI和其他领先的人工智能实验室正在做出一系列自愿承诺&#xff0c;以加强人工智能技术和我们的服务的安全性、安全性和可信度。这个过程由白宫协调&#xff0c;是在美国和世界各地推进有意义和有效的人工智能治理的重要一步。 作为我们建立安全和有益的AGI的使命的一部分&a…

符合国内企业国产化需求的进销存系统

编者按&#xff1a;随着国内企业的数字化转型以及国产信创的要求&#xff0c;企业在选择软件系统的时候更加关注国产化这方面的是否能够被满足&#xff0c;信创需求的被满足&#xff0c;意味着可适用的范围更加宽泛&#xff0c;对企业来说&#xff0c;是一个花小成本有大收益的…

【简单图论】CF1833 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 显然&#xff0c;最大值就是什么边都不连的连通块个数&#xff0c;最小值就是能连的都连上 那就是&#xff0c;如果一个连通块存在度为1的点&#xff0c;就把它当作接口连接 Code&#xff1a; #include <b…

23.动态加载

动态加载 html部分 <div class"loading"> </div>css部分 *{margin: 0;padding: 0; } body{background-color: #2c3e50;display: flex;align-items: center;justify-content: center;height: 100vh;overflow: hidden; } .loading{position: relative;w…

Simulink仿真模块 - Mux

Mux:将相同数据类型和复/实性的输入信号合并为虚拟向量 在仿真库中的位置为:Simulink / Commonly Used Blocks Simulink / Signal Routing HDL Coder / Commonly Used Blocks HDL Coder / Signal Routing 模型为: 说明 Mux 模块将具有相同数据类型和复/实性的输入合并为一个向…

高精度地图服务引擎项目

技术栈&#xff1a;使用vue3TypeScriptElement PlusPiniaaxios 项目描述&#xff1a;高精度地图服务引擎项目&#xff0c;提供轻量化处理3D瓦片切片分布式处理分发服务的一站式解决方案 工作内容&#xff1a;1、项目60%已上的页面开发 2、部分模块的功能实现&#xff0c; 3、封…

网络安全进阶学习第七课——文件包含漏洞

文章目录 一、文件包含概念二、文件包含漏洞原理三、文件包含分类文件包含分为两种&#xff1a; 四、与文件包含相关的配置文件&#xff1a;&#xff08;php.ini文件&#xff09;五、与文件包含有关的函数1、include()2、include_once()3、require()4、require_once() 六、文件…

深兰科技大模型入围2023年数字经济应用场景“揭榜挂帅” 项目名单

7月17日&#xff0c;武汉市2023年数字经济应用场景“揭榜挂帅”拟揭榜项目名单&#xff0c;正式揭晓公示。 在经专家评审、项目路演、现场核查等层层遴选之后&#xff0c;由深兰科技武汉研发中心、深兰科技(上海)有限公司联合武汉碧水产业发展有限公司、武汉江汉路步行街投资发…

IDEA导入微服务项目后自动将微服务展示在service面板中

有时候&#xff0c;不会自动将微服务展示在service面板中。 添加service面板&#xff1a; service面板&#xff1a; 更新所有maven&#xff0c;就可以自动将微服务展示在service面板中。

C++: day7

1.简单实现部分vector #include <iostream>using namespace std;template <typename T> class My_vector { private:T * first; //指向第一个元素T * last; //指向最后一个元素T * end; //指向容器末尾public://构造函数My_vector(){first las…

通识测试08

正交试验法 正交实验助手&#xff08;工具&#xff09; 正交原理介绍 一、正交实验法&#xff0c;统计学家提出 2.使用工具&#xff1a;正交表 3. 统计和分析实验数据&#xff0c;从大量实验中找到合适的实验数据组合。 4. 大量实验中挑选一部分具有代表性的点。进行实验&…

三星李在镕亲会马斯克,低价拿下特斯拉HW5.0芯片订单

作者|Amy 编辑|德新 提到特斯拉&#xff0c;第一印象往往是「美国新晋新能源汽车巨头」。实际上特斯拉的芯片设计也是走在行业前列的。 2016年&#xff0c;特斯拉挖来了传奇芯片大师Jim Keller&#xff0c;搭建了由Pete Bannon等大牛组建的芯片研发团队。其自研的HW3.0&#…

钉钉和金蝶云星空接口打通对接实战

钉钉和金蝶云星空接口打通对接实战 对接系统&#xff1a;钉钉 钉钉是阿里巴巴集团打造的企业级智能移动办公平台&#xff0c;是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能人事、钉工牌、工作台深度整…