input 超出maxlength限制后,输入框变红
一、前言
最近收到产品的一个需求:
输入框限制了maxlength=“11”,需要在输入第12位时,输入框变红;当然,第12位是不能真正输入到输入框中的。
二、实现难点
其实,单纯的要监听 字母和数字以及字符 还是比较容易实现的,通过监听 keyup、input 基本都能做到。但是,有一个问题就是:在输入中文时,还是拼写,这时输入框也需要变红,上面的事件就监听不到。需要单独的事件 compositionstart、compositionend。
实现难点有以下两个:
1. input 怎么区分输入的是中文 和 (英文或者数字)
方法一:监听 compositionstart、compositionend 和 input或者keyup 这三个事件
方法二:InputEvent:isComposing 属性 ==> MDN解释表示事件是否是在 compositionstart 之后且在 compositionend 之前触发的。
解析compositionstart、compositionend:
- compositionstart 开始输入中文拼音,但没确定输入到输入框内
- compositionend 介绍中午拼写,对于文字已录入到输入框
- 输入英文和数字,特殊字符不会触发
2. vue自定义指令,在同时绑定多个事件时,怎么在多个事件中传参(可能用不到)
在绑定的事件中,对事件源进行处理;将参数放到 e.target.参数名 = '参数值' => 这样在每个事件源中都能获取到参数
三、自定义指令实现限制输入框最大长度,达到限制长度再次输入时,输入框变红
/*** 限制输入框最大长度,达到限制长度再次输入时,输入框变红* 用法:v-input-maxlength="6" 不能在标签上配置 maxlength 属性*/
Vue.directive('input-maxlength', {bind(el, binding, vnode) {const ele = el.tagName === 'INPUT' ? el : el.querySelector('input');ele.addEventListener('compositionend', maxInputCallback(el, ele, binding.value), false)ele.addEventListener('input', maxInputCallback(el, ele, binding.value), false);ele.addEventListener('focus', maxInputFocus(el, ele), false);ele.addEventListener('blur', maxInputBlur(el, ele), false);},unbind(el) {const ele = el.tagName === 'INPUT' ? el : el.querySelector('input');ele.removeEventListener('compositionend', maxInputCallback(el, ele), false);ele.removeEventListener('input', maxInputCallback(el, ele), false);ele.removeEventListener('focus', maxInputFocus(el, ele), false);ele.removeEventListener('blur', maxInputBlur(el, ele), false);}
});function maxInputCallback(el, ele, maxLength ) {function handler(e) {// 指令事件间传参,// e.target.test = '123'; => 这样在其他事件中就能通过e.target获取了if( maxLength === undefined ) return;let val = ele.value;if( val.length > maxLength && !e.isComposing ) { // 这个条件有一个小问题,当输入达到限制后,正在拼中文时(e.isComposing = true)边框是蓝色的ele.value = val.substr(0, maxLength);ele.style.border = '1px solid #F00';} else {ele.style.border = '1px solid #409EFF';}}return handler;
}function maxInputFocus(el, ele) {function handler(e) {ele.style.border = '1px solid #409EFF';}return handler;
}
function maxInputBlur(el, ele) {function handler(e) {ele.style.border = '1px solid #DCDFE6';}return handler;
}------------分割线:如果监听keyup事件,可以参考下面代码,但会有很多问题。最好不要使用------------
function maxInputKeyup(el, ele ) {const maxLength = ele.getAttribute('maxlength');const regex = /^[a-zA-Z0-9~!@#$%^&*()-=_+{}<>?:"',./\[\]]$/; // 不支持空格let oldLimitLength = false; // 上一次输入是否达到限制长度function handler(e) {let val = ele.value;/*** val.length >= maxLength 是当前输入是否达到限制长度* oldLimitLength 是上一次输入是否达到限制长度* 如果当前输入达到限制长度,并且上一次输入没有达到限制长度,则表示为正好输入到限制长度(只要一个条件无法判断这种情况)* 如果当前输入长度小于限制长度,但上一次输入达到限制长度,则表示为删除操作=>删除了限制字符的最后一个字符*/console.log('------>>> 333333333',e, regex.test(e.key), e.isComposing);// 在输入限制的最后一个字符并且是输入中文时会有问题 if( regex.test(e.key) && val.length >= maxLength && oldLimitLength ) {ele.style.border = '1px solid #F00';} else {ele.style.border = '1px solid #409EFF';}if (val.length >= maxLength) {oldLimitLength = true;} else {oldLimitLength = false;}}return handler;
}
文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!
相关文章:
input 超出maxlength限制后,输入框变红
一、前言 最近收到产品的一个需求:输入框限制了maxlength“11”,需要在输入第12位时,输入框变红;当然,第12位是不能真正输入到输入框中的。 二、实现难点 其实,单纯的要监听 字母和数字以及字符 还是比较容…...
Docker 构建镜像并搭建私人镜像仓库教程
构建镜像教程 步骤 1:安装 Docker #在安装 Docker 之前,建议先更新系统软件包。 sudo yum update -y # 移除旧的Docker版本和Podman、runc软件包及其相关依赖。 yum remove -y docker docker-client docker-client-latest docker-ce-cli docker-commo…...
doris:MySQL Dump
Doris 在 0.15 之后的版本已经支持通过 mysqldump 工具导出数据或者表结构 使用示例 导出 导出 test 数据库中的 table1 表:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1 导出 test 数据库中的 table1 表结构&am…...
OpenBMC:通过qemu-system-arm运行编译好的image
OpenBMC:编译_openbmc meson.build file-CSDN博客 讲述了如何编译生成openbmc的image 完成编译后可以通过qemu-system-arm进行模拟加载,以便在没有BMC硬件的情况下进行调试 1.下载qemu-system-arm 在openbmc的上级目录上执行 wget https://jenkins.op…...
STM32的HAL库开发---通用定时器(TIMER)---定时器脉冲计数
一、脉冲计数实验原理 1、 外部时钟模式1:核心为蓝色部分的时基单元,时基单元的时钟源可以来自四种,分别是内部时钟PCLK、外部时钟模式1,外部时钟模式2、内部定时器触发(级联)。而脉冲计数就是使用外部时钟…...
动态规划LeetCode-121.买卖股票的最佳时机1
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。…...
网安三剑客:DNS、CDN、VPN
DNS(网络地址转换系统)的技术原理与安全应用 1. 网络地址转换系统的基本原理 DNS通过解析用户的访问URL(超链接),将其映射到服务器上存储的信息。具体来说: 解析URL:DNS从URL中提取出 hostna…...
Linux在x86环境下制作ARM镜像包
在x86环境下制作ARM镜像包(如qemu.docker),可以通过QEMU和Docker的结合来实现。以下是详细的步骤: 安装QEMU-user-static QEMU-user-static是一个静态编译的QEMU二进制文件,用于在非目标架构上运行目标架构的二进制文…...
Vue3+codemirror6实现公式(规则)编辑器
实现截图 实现/带实现功能 插入标签 插入公式 提示补全 公式验证 公式计算 需要的依赖 "codemirror/autocomplete": "^6.18.4","codemirror/lang-javascript": "^6.2.2","codemirror/state": "^6.5.2","cod…...
Lua中文语言编程源码-第十一节,其它小改动汉化过程
__tostring 汉化过程 liolib.c metameth[] {"__转换为字符串", f_tostring}, lauxlib.c luaL_callmeta(L, idx, "__转换为字符串") lua.c luaL_callmeta(L, 1, "__转换为字符串") __len 汉化过程 ltm.c luaT_eventname[] ltablib.c c…...
Safari常用快捷键
一、书签边栏 1、显示或隐藏书签边栏:Control-Command-1 2、选择下一个书签或文件夹:向上头键或向下头键 3、打开所选书签:空格键 4、打开所选文件夹:空格键或右箭头键 5、关闭所选文件夹:空格键或左箭头键 6、更…...
Git登录并解决 CAPTCHA
修改公司域账户密码之后,导致今天pull代码时显示:remote error: CAPTCHA required 本文将介绍如何解决 Git 中的常见错误“fatal: Authentication failed for git”。该问题通常出现在尝试访问远程 Git 仓库时,表示身份验证失败。以下是几种常…...
Websocket从原理到实战
引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,它使得客户端和服务器之间能够进行实时、双向的通信,既然是通信协议一定要从发展历史到协议内容到应用场景最后到实战全方位了解 发展历史 WebSocket 最初是为了解决 HTTP 协议在实时…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_get_options函数
声明 就在 main函数所在的 nginx.c 中: static ngx_int_t ngx_get_options(int argc, char *const *argv); 实现 static ngx_int_t ngx_get_options(int argc, char *const *argv) {u_char *p;ngx_int_t i;for (i 1; i < argc; i) {p (u_char *) argv[i]…...
判断您的Mac当前使用的是Zsh还是Bash:echo $SHELL、echo $0
要判断您的Mac当前使用的是Zsh还是Bash,可以使用以下方法: 查看默认Shell: 打开“终端”应用程序,然后输入以下命令: echo $SHELL这将显示当前默认使用的Shell。例如,如果输出是/bin/zsh,则说明您使用的是Z…...
Centos执行yum命令报错
错误描述 错误:为仓库 ‘appstream’ 下载元数据失败 : Cannot prepare internal mirrorlist: Curl error (6): Couldn’t resolve host name for http://mirrorlist.centos.org/?release8&archx86_64&repoAppStream&infrastock [Could not resolve h…...
订单超时设计(1)--- 如何使用redis实现订单超时实时关闭功能
如何使用redis实现订单超时实时关闭功能 准备工作实现步骤解释注意事项(重点) 使用Redis实现订单超时实时关闭功能,可以利用Redis的延时队列(使用Sorted Set实现)和过期键(使用TTL和Keyspace Notifications…...
485网关数据收发测试
目录 1.UDP SERVER数据收发测试 使用产品: || ZQWL-GW1600NM 产品||【智嵌物联】智能网关型串口服务器 1.UDP SERVER数据收发测试 A(TX)连接RX B(RX)连接TX 打开1个网络调试助手,模拟用户的UDP客户端设…...
RabbitMQ快速上手及入门
概念 概念: publisher:生产者,也就是发送消息的一方 consumer:消费者,也就是消费消息的一方 queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理 exchang…...
4种架构的定义和关联
文章目录 **1. 各架构的定义****业务架构(Business Architecture)****应用架构(Application Architecture)****数据架构(Data Architecture)****技术架构(Technology Architecture)*…...
OpenClaw深度沟通渠道-全景深度解构
OpenClaw深度沟通渠道-全景深度解构OpenClaw的渠道(Channels)是其“交互层”的核心,是用户意图与AI执行力的唯一交汇点。选择渠道,就是选择将AI能力注入您数字生活的哪个场景。以下分析将超越简单列表,深入每个渠道的技…...
零成本体验软路由:京东云AX1800 Pro刷iStoreOS OpenWrt的完整教程(含空间扩容技巧)
京东云AX1800 Pro软路由改造全指南:从刷机到空间优化的实战手册 在智能家居和高速网络需求激增的今天,一台性能出色的路由器已成为家庭数字生活的核心枢纽。京东云AX1800 Pro作为一款性价比极高的Wi-Fi 6路由器,其硬件配置远超同价位产品——…...
如何在Linux内核中实现高性能exFAT文件系统读写支持?
如何在Linux内核中实现高性能exFAT文件系统读写支持? 【免费下载链接】exfat-nofuse Android ARM Linux non-fuse read/write kernel driver for exFat and VFat Android file systems 项目地址: https://gitcode.com/gh_mirrors/ex/exfat-nofuse 你是否曾经…...
mT5中文-base零样本增强模型效果展示:客服对话意图泛化与槽位值增强案例
mT5中文-base零样本增强模型效果展示:客服对话意图泛化与槽位值增强案例 1. 模型能力概览 mT5中文-base零样本增强模型是一个专门针对中文文本增强优化的AI模型。它在原有mT5模型基础上,使用了大量中文数据进行深度训练,并引入了创新的零样…...
面试官:什么是最左前缀匹配?为什么要遵守?(修订版)
在线 Java 面试刷题(持续更新):https://www.quanxiaoha.com/java-interview面试考察点原理理解:面试官不仅仅想知道你会背 "最左前缀原则",更想考察你是否理解联合索引的 B 树存储结构,能否从数据…...
霜儿-汉服-造相Z-Turbo惊艳作品展:AI复原历史人物经典汉服造型
霜儿-汉服-造相Z-Turbo惊艳作品展:AI复原历史人物经典汉服造型 最近,一个名为“霜儿-汉服-造相Z-Turbo”的AI模型在圈子里悄悄火了起来。它干的事儿挺有意思:不是凭空创造新形象,而是试图“复原”那些活在文字、画作和历史记忆里…...
Ostrakon-VL-8B视觉语言模型一键部署:Anaconda环境配置保姆级教程
Ostrakon-VL-8B视觉语言模型一键部署:Anaconda环境配置保姆级教程 你是不是也对那些能看懂图片、还能跟你聊天的AI模型感到好奇?想自己动手部署一个来玩玩,结果被各种环境配置、依赖冲突搞得头大?别担心,今天咱们就来…...
罗技鼠标宏终极指南:如何用Lua脚本实现绝地求生无后座力射击
罗技鼠标宏终极指南:如何用Lua脚本实现绝地求生无后座力射击 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 想要在《绝地求生》中实…...
s2-pro音色复用效果实测:同一参考音频在不同文本长度下的泛化能力
s2-pro音色复用效果实测:同一参考音频在不同文本长度下的泛化能力 1. 测试背景与目的 s2-pro作为Fish Audio开源的专业级语音合成模型镜像,其核心亮点之一是支持通过参考音频复用音色。这项功能在实际应用中极为实用,比如: 企业…...
3步搞定浏览器脚本:Greasy Fork小白也能懂的终极指南
3步搞定浏览器脚本:Greasy Fork小白也能懂的终极指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 你是否厌倦了网页上烦人的广告?想要自动填充表单、一键下载视…...
