扫码枪与Input的火花

news2024/11/21 0:13:54

文章目录

  • 前言
  • 一、需求:交互细节
  • 二、具体实现
    • 两个核心的函数:
    • 自动聚焦
  • 三,扩展知识
    • @input 与 @change的区别


前言

在浏览器扫描条形码获取条形的值,再操作对应的逻辑。这是比较常见的业务,这里记录实际操作。

其中PC端用的是elmentui-plus,mobile端用的vant-ui


一、需求:交互细节

这里用的都是input框。
1.直接扫码条形码后,获取到条形的值。处理相应逻辑。有的是跳转页面,有的是继续扫码,继续扫码这里就要input框的值要清零。
2.在当前页面,可以支持是否选择自动聚焦到Input框。
3.支持手动输入
4.都是把英文转为大写,前面空格去掉。
5.支持点击tab,enter键盘后触发。
6. input的值输入后,立即Disable input框,这里防止异步操作还没完成,状态更新不及时。

二、具体实现

这里是vantui的代码

        <van-field
          ref="BarCodeRef"
          class="custom-barcode-input"
          v-model="variable.BarCode"
          placeholder="Scan BarCode"
          @input="BarCodeChange"
          @keyup.enter="BarCodeChangeImmediate"
          @keydown.tab="BarCodeChangeImmediate"
        />

其中BarCodeChange需要用debounce ,如果没有加debounce 的话,扫码405 的条形码,扫到4的时候 @input 了 就立即触发 了。
在这里插入图片描述

两个核心的函数:

BarCodeChange :

 const BarCodeChange = () => {
    console.log('Code:',variable.BarCode)
    if (isHasCalledImmediate.value) {
      isHasCalledImmediate.value = false
      return
    }
    BarCodeChangeImmediate(false)
  }

BarCodeChangeImmediate :

const BarCodeChangeImmediate = async (isImmediate: boolean = true) => {
  console.log('BarCodeChangeImmediate')
  if (!variable.BarCode) {
    return
  }
  // 有些地方需要立即触发
  if (isImmediate) {
    isHasCalledImmediate.value = true
  }

  variable.BarCode = String(variable.BarCode).trim()?.toUpperCase()
  console.log(variable.BarCode, 'scanVal')
  // 处理对应的逻辑
  fun()
}

自动聚焦

清空input的值,并且聚焦。可以考虑抽一个hooks。

const resetBarCodeAdnFocus = () => {
  let timerId = setTimeout(() => {
    variable.BarCode = ''
    BarCodeRef.value?.focus()
    clearTimeout(timerId)
  }, 0)
}

三,扩展知识

@input 与 @change的区别

@input 和 @change 是两个不同的事件,它们的区别在于触发时机和触发条件。

@input 事件会在用户输入任何内容时都会触发,包括敲击键盘、鼠标点击、剪切粘贴等,只要表单元素的值发生变化,就会触发 @input 事件。

@change 事件只有在表单元素失去焦点时才会触发,也就是用户点击外部区域或按下 Enter 键确认输入时触发。如果用户一直保持焦点在表单元素上,即使输入内容发生变化,也不会触发 @change 事件。

另外,@input 事件可以实时监听用户的输入内容,而 @change 事件只会在用户完成输入并且失去焦点后才会触发。

因此,如果需要实时获取用户输入内容,可以使用 @input 事件;如果只需要在用户完成输入后获取内容,可以使用 @change 事件。

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

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

相关文章

LeetCode2095删除链表的中间节点

题目描述 给你一个链表的头节点 head 。删除 链表的 中间节点 &#xff0c;并返回修改后的链表的头节点 head 。长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。对于 n 1、…

Leaflet系列——【一】初识Leaflet与Leaflet视图操作

初识Leaflet&#xff08;vue3 &#xff09; 前言&#xff1a;当你熟悉了openlayer、mapbox、cesium等一些GIS框架之后&#xff0c;对于我们开发来说其实他们的本质就是往瓦片上面叠加图层、【点、线、面、瓦片、geoJson、热力图、图片、svg等等】都是一层层的Layer图层&#xf…

AI与人类生活的融合:安克创新CEO阳萌的深度洞见

安克创新CEO阳萌分享了他对人工智能未来发展的深刻见解。阳萌不仅深入探讨了大模型技术的应用前景&#xff0c;还对AI与人类生活的融合提出了引人入胜的思考。以下是对这次访谈内容的总结和分析。 大模型技术的现实应用 阳萌提到&#xff0c;尽管大模型在处理通用知识方面表…

拥有一个生产女朋友的工厂,是什么体验

正所谓&#xff0c;“旱的旱死&#xff0c;涝的涝死”&#xff0c;在这个充满竞争的编程界&#xff0c;我们似乎总是忙于解决bug和优化算法&#xff0c;以至于个人生活常常被忽略。但别担心&#xff0c;今天&#xff0c;我们要用一种独特的方式&#xff0c;解决这个“问题”。 …

OpenAI Whisper 语音转文本实验

为了实现语音方式与大语言模型的对话&#xff0c;需要使用语音识别&#xff08;Voice2Text&#xff09;和语音输出&#xff08;Text2Voice&#xff09;。感觉这项技术已比较成熟了&#xff0c;国内也有许多的机构开发这项技术&#xff0c;但是像寻找一个方便测试的技术居然还不…

根据后端返回下拉请求地址,前端动态请求拿到下拉数据渲染

完整代码如下&#xff1a; <template> <!-- 资源列表页 --> <div> <div> <i click"$router.go(-1)" style" color: #409eff; cursor: pointer; margin-right: 5px; font-size: 18px; " class"el-icon-back" ><…

C++ 关键字 :using

在 C 庞大语法体系中&#xff0c; using 关键字十分的灵活多用&#xff0c;它可不简单。 除了常规的引入命名空间之外&#xff0c;它还可用于引入枚举类型枚举器、定义常规类型别名、模板类型别名等。在定义常规类型别名方面与C语言中的typedef、#define与之相似&#xff0c;但…

jupyter notebook中调整图片大小

截屏 ctrl V 这个目前只能保证是截屏大小&#xff0c;改变不了&#xff0c;要么之久 把图形缩小后再截图 感觉很模糊 png文件导入 markdown 代码1 <img src"./1.png" width250 height200>markdown 代码2 <img src"./1.png" width938 height…

文献速递:多模态深度学习在医疗中的应用--多模式婴儿脑分割技术:模糊引导深度学习

Title 题目 Multimodal Infant Brain Segmentation by Fuzzy-informed Deep Learning 多模式婴儿脑分割技术&#xff1a;模糊引导深度学习 01 文献速递介绍 日益普及的非侵入式婴儿脑磁共振图像&#xff08;MRI&#xff09;为准确理解脑主要发展轨迹的动态性提供了机会&…

普中STM32F103ZET6开发板让DS0和DS1两个LED同时亮

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.运行效果 一.前言 在这套stm32教程中,只教学了如何亮DS0,而没有教学如何亮DS1。 二.代码 main.c #include "stm32f10x.h"void Syst

一篇文章告诉你聚类算法的作用和怎么用聚类算法!建议收藏!(下篇)

EM聚类 EM聚类 基于概率分布对数据进行建模&#xff0c;通过迭代的期望和最大化步骤来估计模型参数&#xff0c;并将数据分为不同的聚类。EM聚类通常用于处理混合分布的数据&#xff0c;其中每个聚类被建模为一个概率分布。 原理介绍 EM聚类的核心思想是将数据集中的每个样本…

二分答案(区间范围)

D. Jumping Through Segments 输入数据 4 5 1 5 3 4 5 6 8 10 0 1 3 0 2 0 1 0 3 3 3 8 10 18 6 11 4 10 20 0 5 15 17 2 2 输出范围 7 0 5 13#include<bits/stdc.h> #define int long long using namespace std; typedef pair<char,int>PII; const int N2e510;…

应急响应-Windows-挖矿病毒

随着虚拟货币市场的繁荣&#xff0c;挖矿病毒已成为网络安全领域一大挑战。该类病毒利用计算机资源进行加密货币的挖掘&#xff0c;给个人用户和企业网络带来了严重的安全风险。本文将针对挖矿病毒的应急响应和防范措施进行分析和总结。 一.判断挖矿病毒 服务器突然发现CPU资…

树莓派发送指令控制FPGA板子上的流水灯程序

文章目录 前言一、树莓派简介二、整体实现步骤三、树莓派设置四、树莓派串口代码五、Verilog代码5.1 串口接收模块5.2 流水灯模块 六、quartus引脚绑定七、 运行效果总结参考 前言 ​ 本次实验的目的是通过树莓派和FPGA之间的串口通信&#xff0c;控制FPGA开发板上的小灯。实验…

OpenAI 发布新款大型语言模型 GPT-4o,带大家了解最新ChatGPT动态。

OpenAI 发布新款大型语言模型 GPT-4o 昨日OpenAI 举办了一场线上活动&#xff0c;正式发布了其最新研发的 AI 模型 GPT-4o&#xff0c;并详细介绍了该模型的强大功能和未来发展规划。此次发布标志着 AI 技术的重大突破&#xff0c;为用户提供了更加便捷、高效的 AI 工具&#…

css多种布局方式

css多种布局方式 简介标准流布局&#xff08;主要依赖margin\padding&#xff09;浮动布局&#xff08;float&#xff09;定位布局&#xff08;position&#xff09;弹性布局&#xff08;flex&#xff09;网格布局&#xff08;grid&#xff09;多列布局&#xff08;column&…

【论文阅读】<YOLOP: You Only Look Once for PanopticDriving Perception>

Abstract 全视驾驶感知系统是自动驾驶的重要组成部分。一个高精度的实时感知系统可以帮助车辆在驾驶时做出合理的决策。我们提出了一个全视驾驶感知网络&#xff08;您只需寻找一次全视驾驶感知网络&#xff08;YOLOP&#xff09;&#xff09;&#xff0c;以同时执行交通目标检…

7.STL中string的一些超常用函数 (附习题)

目录 1.find 2.atoi 3.to_string 4.getline 【leetcode 习题】 387.字符串中的第一个唯一字符 125. 验证回文串 1.find 1.查找第一次出现的目标字符串&#xff1a;说明&#xff1a;如果查找成功则输出查找到的第一个位置&#xff0c;否则返回-1&#xff1b; s1.find(s2…

嗨动PDF编辑器怎么删除pdf空白页?教程来啦!

嗨动PDF编辑器怎么删除pdf空白页&#xff1f;在日常的工作和学习中&#xff0c;PDF文件因其跨平台兼容性和稳定性而备受青睐。然而&#xff0c;在编辑PDF文件时&#xff0c;我们往往会遇到一些令人头疼的问题&#xff0c;其中最常见的就是空白页。空白页不仅浪费了宝贵的存储空…

ESP32-S3+86盒线控器方案,含开发时问题技术解答

随着智能家居产品越来越多&#xff0c;线控器应用也加大&#xff0c;86盒线控器跟智能吹风机联动&#xff0c;跟中央空调联动&#xff0c;下面讲下ESP32-S386盒线控器方案在开发中遇到的问题。 一、ESP32-S386盒线控器方案&#xff1a; 1、无需网关&#xff0c;可以直接连家里…