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

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.lryc.cn/news/2401667.html

相关文章:

  • Spring Boot 启动流程及配置类解析原理
  • Vehicle HAL(5)--vhal 实现设置属性的流程
  • WebRTC中的几个Rtp*Sender
  • 代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、栈与队列总结
  • Java编程课(一)
  • IDEA202403 设置主题和护眼色
  • 无人机螺旋桨平衡方法详解
  • VUE混合开发用哪个PHP框架好?
  • 基于51单片机的车内防窒息检测报警系统
  • Flask-Babel 使用示例
  • Android 轻松实现 增强版灵活的 滑动式表格视图
  • 寄存器模型生成:从手工到自动化
  • 国标GB28181视频平台EasyGBS视频实时监控系统打造换热站全景可视化管理方案
  • docker生命周期
  • 鸿蒙缺少WMIC missing WMIC
  • 25.6.5学习总结
  • Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
  • linux_centos7.x的ifconfig命令显示内容详解
  • CentOS 7 如何pip3安装pyaudio?
  • 6.5本日总结
  • 【个人笔记】数据库原理(西电)
  • 嵌入式学习之系统编程(十)网络编程之TCP传输控制协议
  • 【react+antd+vite】优雅的引入svg和阿里巴巴图标
  • 3D动画在微信小程序的实现方法
  • 计算机网络 | 1.2 计算机网络体系结构与参考模型
  • 网心云 OEC/OECT 笔记(1) 拆机刷入Armbian固件
  • 【Web应用】若依框架:基础篇17二次开发-项目名称修改-新建业务模块
  • C获取unix操作系统的信息
  • MQTT入门实战宝典:从零起步掌握物联网核心通信协议
  • 05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作