当前位置:首页 > 科技  > 软件

盘点JavaScript focus/blur(聚焦)实际应用

来源: 责编: 时间:2024-06-21 17:22:10 274观看
导读一、前言当用户点击某个元素或使用键盘上的 Tab 键选中时,该元素将会获得聚焦(focus)。当网页加载时,HTML-特性(attribute)。autofocus也可以让一个焦点落在元素上,不仅如此,还有其它途径可以获得焦点。二、focus/blur 事件当

一、前言

3L528资讯网——每日最新资讯28at.com

当用户点击某个元素或使用键盘上的 Tab 键选中时,该元素将会获得聚焦(focus)。当网页加载时,HTML-特性(attribute)。3L528资讯网——每日最新资讯28at.com

autofocus也可以让一个焦点落在元素上,不仅如此,还有其它途径可以获得焦点。3L528资讯网——每日最新资讯28at.com

二、focus/blur 事件

当元素聚焦时,会触发 focus事件,当元素失去焦点时,会触发 blur事件。让使用它们来校验一个 input字段。3L528资讯网——每日最新资讯28at.com

1. 案例分析

blur事件处理程序检查这个字段是否输入了电子邮箱,如果没有输入,则显示一个 error。3L528资讯网——每日最新资讯28at.com

focus事件处理程序隐藏 error 信息(在blur事件处理程序上会被再检查一遍)。3L528资讯网——每日最新资讯28at.com

2. 代码

<style>  .invalid { border-color: red; }  #error { color: red }</style>Your email please: <input type="email" id="input"><div id="error"></div><script>input.onblur = function() {  if (!input.value.includes('@')) { // not email    input.classList.add('invalid');    error.innerHTML = 'Please enter a correct email.'  }};input.onfocus = function() {  if (this.classList.contains('invalid')) {    // 移除 "error" 指示,因为用户想要重新输入一些内容    this.classList.remove('invalid');    error.innerHTML = "";  }};</script>

3L528资讯网——每日最新资讯28at.com

注:3L528资讯网——每日最新资讯28at.com

现代 HTML 允许使用 input特性(attribute),进行许多验证:required,pattern等。3L528资讯网——每日最新资讯28at.com

有时它们正是所需要的。当需要更大的灵活性时,可以使用 JavaScript。如果数据是正确的,可以把它自动发送到服务器。3L528资讯网——每日最新资讯28at.com

三、focus/blur 方法

elem.focus()和 elem.blur()方法可以设置和移除元素上的焦点。3L528资讯网——每日最新资讯28at.com

例:3L528资讯网——每日最新资讯28at.com

如果输入值无效,可以让焦点无法离开这个 input字段:3L528资讯网——每日最新资讯28at.com

<body style="background-color: aqua;">Your email please:   <input type="email" id="input">    <input type="text" style="width:220px" placeholder="make email invalid and try to focus here">    <script>        input.onblur = function() {            if (!this.value.includes('@')) { // not email                // 显示 error                this.classList.add("error");                // ...将焦点放回来                input.focus();            } else {                this.classList.remove("error");            }        };</script></body>

3L528资讯网——每日最新资讯28at.com

注:3L528资讯网——每日最新资讯28at.com

如果在 input中输入一些内容,然后尝试使用 Tab 键或点击远离 <input>的位置,那么 onblur事件处理程序会把焦点重新设置到这个 input字段上。3L528资讯网——每日最新资讯28at.com

四、focus/blur 委托

focus和blur事件不会向上冒泡。

例如,不能把 onfocus放在 <form>上来对其进行高亮,像这样:3L528资讯网——每日最新资讯28at.com

<!-- on focusing in the form -- add the class --><form onfocus="this.className='focused'">  <input type="text" name="name" value="Name">  <input type="text" name="surname" value="Surname"></form><style>   .focused {         outline: 1px solid red;   } </style>

当用户聚焦于 <input>时,focus事件只会在该 <input>上触发。它不会向上冒泡。所以 form.onfocus永远不会触发。3L528资讯网——每日最新资讯28at.com

form.onfocus永远不会触发,(两个解决方案)。3L528资讯网——每日最新资讯28at.com

1. 方案一

有一个遗留下来的有趣的特性(feature):focus/blur不会向上冒泡,但会在捕获阶段向下传播。3L528资讯网——每日最新资讯28at.com

<form id="form">  <input type="text" name="name" value="Name">  <input type="text" name="surname" value="Surname"></form><style>   .focused {    outline: 1px solid red;   } </style><script>  // 将处理程序置于捕获阶段(最后一个参数为 true)  form.addEventListener("focus", () => form.classList.add('focused'), true);  form.addEventListener("blur", () => form.classList.remove('focused'), true);</script>

2. 方案二

可以使用 focusin和 focusout事件 —— 与 focus/blur事件完全一样,只是它们会冒泡。3L528资讯网——每日最新资讯28at.com

注意:必须使用 elem.addEventListener来分配它们,而不是 on<event>。3L528资讯网——每日最新资讯28at.com

所以,这是另一个可行的变体:3L528资讯网——每日最新资讯28at.com

<form id="form">  <input type="text" name="name" value="Name">  <input type="text" name="surname" value="Surname"></form><style>   .focused {     outline: 1px solid red;   } </style><script>  form.addEventListener("focusin", () => form.classList.add('focused'));  form.addEventListener("focusout", () => form.classList.remove('focused'));</script>

一样的结果:3L528资讯网——每日最新资讯28at.com

3L528资讯网——每日最新资讯28at.com

五、总结

本文基于JavaScript基础,介绍了focus/blur(聚焦)实际应用。通过事件以及对方法的讲解。在元素获得/失去焦点时会触发 focus和 blur事件,通过 document.activeElement来获取当前所聚焦的元素。focus/blur 委托时遇到的问题,提供了两个有效的解决方案。3L528资讯网——每日最新资讯28at.com

欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。3L528资讯网——每日最新资讯28at.com

通过代码的演示,运行效果图的展示,能够让读者更直观的理解,更好的学习。3L528资讯网——每日最新资讯28at.com

代码很简单,希望能够帮助你更好的学习。3L528资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-95545-0.html盘点JavaScript focus/blur(聚焦)实际应用

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 关于 Serilog.NET 中的日志使用技巧

下一篇: 18 个基本 JavaScript 方法代码片段

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的&ldquo;新电商三兄弟&rdquo;成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top