当前位置: 首页 > backend >正文

vue+element-ui一个页面有多个子组件组成。子组件里面有各种表单,实现点击enter实现跳转到下一个表单元素的功能。

一个父组件里面是有各个子组件的form表单组成的。

我想实现点击enter。焦点直接跳转到下一个表单元素。

父组件就是由各个子组件构成

子组件就像下图一样的都有个el-form的表单。

enterToTab.js

let enterToTab = {};
(function() {// 返回随机数enterToTab.addEnterListener = function() {if (window.__completeEnterBind__) return;window.addEventListener("keydown", enterCallback);window.__completeEnterBind__ = true;};enterToTab.removeEnterListener = function() {window.removeEventListener("keydown", enterCallback);window.__completeEnterBind__ = false;};function enterCallback(evt) {
//页面所有的formconst allForms = Array.from(document.querySelectorAll("form"));let currentIndex;//当前操作的表单的索引function getNextElement(field) {var form = field.form;//如果form.elements不存在就去寻找下一个最近的form元素if (form?.elements) {// 找到当前元素所在的表单const currentForm = form.closest("form");currentIndex = allForms.indexOf(currentForm);}for (var e = 0; e < form?.elements.length; e++) {if (field.className.includes("el-radio") &&field.querySelector("input") == form.elements[e]) {break;} else if (field == form.elements[e]) {break;}}if (form?.elements[e + 1] == undefined) {//当前表单的最后一个元素.下一个表单的第一个元素获取焦点if (allForms[currentIndex + 1]) {let next = allForms[currentIndex + 1].querySelector("input");if (next.type == "radio") {//单选框return next.parentElement.parentElement.focus();} else {return next.focus();}}} else {return form?.elements[e + 1];}}if (evt.keyCode === 13) {//document.all可以判断浏览器是否是IE,是页面内所有元素的一个集合var isie = document.all ? true : false;var key;var srcobj;// if the agent is an IE browser, it's easy to do this.if (isie) {key = event.keyCode;srcobj = event.srcElement; //event.srcElement,触发这个事件的源对象} else {key = evt.which;srcobj = evt.target; //target是Firefox下的属性}if (key == 13 &&srcobj.type != "button" &&srcobj.type != "submit" &&srcobj.type != "reset" &&srcobj.type != "") {if (isie) event.keyCode = 9;//设置按键为tab键else {var el = getNextElement(evt.target);if (el?.type != "hidden" &&!el?.disabled //nothing to do here.) {}else{while (el?.type == "hidden" || el?.disabled) el = getNextElement(el);}if (!el) {return false;} else if (el.type == "radio"||el.type=="select") {el.parentElement.parentElement.focus();} else {el.focus();}}}}}
})();
export default enterToTab;

 在各个子组件里面添加

import enterToTab from "@/utils/enterToTab";
mounted() {enterToTab.addEnterListener();
},
beforeDestroy() {enterToTab.removeEnterListener();
},
http://www.xdnf.cn/news/12203.html

相关文章:

  • 在 Oracle 中,创建不同类型索引的 SQL 语法
  • 一次Oracle的非正常关闭
  • java学习笔记——数组和二维数组
  • 驶向智能未来:车载 MCP 服务与边缘计算驱动的驾驶数据交互新体验
  • AI学习笔记二十九:YOLOV12部署测试
  • Golang——8、协程和管道
  • 更新Java的环境变量后VScode/cursor里面还是之前的环境变量
  • 【Go语言基础【5】】运算符基础
  • Kubernetes (k8s)版本发布情况
  • Java 依赖注入、控制反转与面向切面:面试深度解析
  • Deployment实现扩展/收缩,以及滚动更新
  • 数据结构第八章(二)-交换排序
  • dvwa14——JavaScript
  • 多层PCB技术解析:从材料选型到制造工艺的深度实践
  • Python 训练营打卡 Day 44
  • Linux下JSON序列化与反序列化方法
  • Python Day44
  • 数据可视化大屏案例落地实战指南:捷码平台7天交付方法论
  • 【达梦数据库】OOM问题排查思路
  • React 新项目
  • OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
  • Spring框架学习day7--SpringWeb学习(概念与搭建配置)
  • Eureka REST 相关接口
  • 云原生思维重塑数字化基座:从理念到实践的深度剖析
  • Python基于蒙特卡罗方法实现投资组合风险管理的VaR与ES模型项目实战
  • Django CMS 的 Demo
  • 每日算法 -【Swift 算法】三数之和最接近目标值
  • Golang——9、反射和文件操作
  • Redis:介绍和认识,通用命令,数据类型和内部编码,单线程模型
  • 深入浅出玩转物联网时间同步:基于BC260Y的NTP实验与嵌入式仿真教学革命