返回顶部
首页 > 资讯 > 前端开发 > VUE >Javascript中blur与click冲突怎么办
  • 740
分享到

Javascript中blur与click冲突怎么办

2024-04-02 19:04:59 740人浏览 泡泡鱼
摘要

这篇文章主要介绍javascript中blur与click冲突怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!解决blur与click冲突前言:在开发中我们会经常遇到blur和c

这篇文章主要介绍javascript中blur与click冲突怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

解决blur与click冲突

前言:

开发中我们会经常遇到blur和click冲突的情况。下面叙述了开发中常遇到的“下拉框”的问题,并提供了两种解决方案。

一、blur和click事件简述

  1. blur事件:当元素失去焦点时触发blur事件;其为表单事件,blur和focus事件不会冒泡,其他表单事件都可以。

  2. click事件:当点击元素时触发click事件;所有元素都有此事件,会产生冒泡。

示例1:blur事件为表单事件

<input type="text" id="tel">
<script>
  document.addEventListener("blur", function(){
    console.log("my document blur");
  });

  var ipt = document.getElementById("tel");
  ipt.addEventListener("blur", function(){
    console.log("my input blur");
  });
</script>
// 输出结果:document为非表单元素
my input blur

示例2:click事件可冒泡

<input type="text" id="tel">
<script>
  document.addEventListener("click", function(){
    console.log("my document click");
  });

  var ipt = document.getElementById("tel");
  ipt.addEventListener("click", function(){
    console.log("my input click");
  });
</script>
// 输出结果:
my input click
my document click

示例3:点击某元素导致前一个元素失去焦点,blur事件优先于click事件

<input type="text" id="ipt">
<input type="button" id="btn" value="点我">
<script>
  var ipt = document.getElementById("ipt");
  ipt.addEventListener("blur", function(){
    console.log("my input blur");
  });

  var btn = document.getElementById("btn");
  btn.addEventListener("click", function(){
    console.log("my button click");
  });
</script>
// 输出结果:
my input blur
my button click

二、下拉框blur和click事件冲突,导致不能正常选择值

实际开发中,我们会经常遇到某一下拉列表框,点击其他元素消失列表框;点击下拉框子元素使其生效的需求。这就会面临冲突问题。

<!-- DOM结构示意 -->
<input type="text" placeholder="请选择姓氏" readonly>
<div class="search-list" data-status="hide">
  <ul>
    <li><a href="javascript:">赵</a></li>
    <li><a href="javascript:">钱</a></li>
    <li><a href="javascript:">孙</a></li>
    <li><a href="javascript:">李</a></li>
  </ul>
</div>

(function($){
  $("input").focus(function(){
    // input框获取焦点,展示下拉框
    $(".search-list").attr("data-status", "show");
  }).blur(function(){
    // input框失去焦点,隐藏下拉框
    $(".search-list").attr("data-status", "hide");
  });
  // 选择对应选项,并赋值给input框
  $(".search-list li a").click(function(){
    console.log("执行");
    $("input").val($(this).text());
  });
})(Jquery);

执行上述代码,会出现一个问题,并不能正确获取下拉框中某值。

原因:由于JavaScript为单线程,同一时间只能执行处理一个事件。由上述示例3,可得知“blur优先于click执行”。而在本示例中,由于blur处理程序,会将对应的下拉框展示区隐藏,所以导致其后续click事件并不会执行。上述console的信息也不会被输出。

解决方案1:对blur事件进行延迟,让click先执行。

(function($){
  $("input").focus(function(){
    // input框获取焦点,展示下拉框
    $(".search-list").attr("data-status", "show");
  }).blur(function(){
    setTimeout(function(){
      // input框失去焦点,隐藏下拉框
      $(".search-list").attr("data-status", "hide");
    }, 300);
  });
  // 选择对应选项,并赋值给input框
  $(".search-list li a").click(function(){
    console.log("执行");
    $("input").val($(this).text());
  });
})(jQuery);

三、使用mousedown让其优先执行

示例4:将示例3中的click事件改为mousedown

<input type="text" id="ipt">
<input type="button" id="btn" value="点我">
<script>
  var ipt = document.getElementById("ipt");
  ipt.addEventListener("blur", function(){
    console.log("my input blur");
  });

  var btn = document.getElementById("btn");
  btn.addEventListener("mousedown", function(){
    console.log("my button mousedown");
  });
</script>
// 输出结果:
my button mousedown
my input blur

mousedown事件:当鼠标指针移动到元素上方,并按下鼠标按键时,会发生mousedown事件。

mouseup事件:当在元素上放松鼠标按钮时,会发生mouseup事件。

注意:

(1)mousedown与click 事件不同,mousedown事件仅需要按键被按下,而不需要松开即可发生。
(2)mouseup与click事件不同,mouseup事件仅需要放松按钮。当鼠标指针位于元素上方时,放松鼠标按钮就会触发该事件。

补充:mousedown、mouseup、click

<input type="button" id="btn" value="点我">
var btn = document.getElementById("btn");
btn.addEventListener("mousedown", function(){
  console.log("my button mousedown");
});
btn.addEventListener("click", function(){
  console.log("my button click");
});
btn.addEventListener("mouseup", function(){
  console.log("my button mouseup");
});
输出结果:
my button mousedown
my button mouseup
my button click

所以,其执行顺序为:

mousedown >> mouseup >> click

解决方案2:将click事件改为mousedown,让其优先于blur事件执行

(function($){
  $("input").focus(function(){
    // input框获取焦点,展示下拉框
    $(".search-list").attr("data-status", "show");
  }).blur(function(){
    // input框失去焦点,隐藏下拉框
    $(".search-list").attr("data-status", "hide");
  });
  // 选择对应选项,并赋值给input框
  $(".search-list li a").mousedown(function(){
    $("input").val($(this).text());
  });
})(jQuery);

以上是“Javascript中blur与click冲突怎么办”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网VUE频道!

--结束END--

本文标题: Javascript中blur与click冲突怎么办

本文链接: https://lsjlt.com/news/69755.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Javascript中blur与click冲突怎么办
    这篇文章主要介绍Javascript中blur与click冲突怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!解决blur与click冲突前言:在开发中我们会经常遇到blur和c...
    99+
    2024-04-02
  • jQuery与其他Javascript类库冲突怎么办
    小编给大家分享一下jQuery与其他Javascript类库冲突怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!与其他Jav...
    99+
    2024-04-02
  • Vue中使用touchstart、touchmove、touchend与click冲突问题
    目录使用touchstart、touchmove、touchend与click冲突事件执行顺序触摸事件(touchstart、touchmove和touchend)下面具体说明总结使...
    99+
    2023-01-28
    Vue使用touchstart Vue使用touchmove Vue使用touchend touchend与click冲突
  • oracle主键冲突怎么办
    在 oracle 中处理主键冲突的方法有:1. 忽略冲突;2. 抛出异常;3. 使用触发器检查数据;4. 创建唯一索引。最佳实践:关键数据使用 unique 或 primary key ...
    99+
    2024-05-21
    oracle
  • 如何解决JS中touchstart事件与click事件冲突的问题
    这篇文章主要介绍了如何解决JS中touchstart事件与click事件冲突的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言移动互联...
    99+
    2024-04-02
  • 亚马逊与谷歌服务器冲突怎么办
    查看冲突发生的位置:如果您发现两个网站之间的某个部分发生了冲突,您可以在其中一个网站上查看有关冲突的详细信息。 退出另一个网站:如果您无法退出另一个网站,则可以尝试退出并重新登录您的账户。 联系网络管理员:如果您无法解决冲突,您可以联系网...
    99+
    2023-10-27
    亚马逊 冲突 服务器
  • jQuery插件版本冲突怎么办
    这篇文章主要介绍jQuery插件版本冲突怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:jQuery 的某个插件 当有多个版本同时可能会有冲突,导致代码错误参考type...
    99+
    2024-04-02
  • win10系统热键冲突怎么办
    这篇文章主要介绍win10系统热键冲突怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!以微软输入法为例,首先点击“M”图标,进入语言首选项,如图所示: 2、在设置窗口中,点击左侧的“区域和语言”,然后在...
    99+
    2023-06-28
  • git解决冲突失败怎么办
    Git是一个非常强大的版本控制工具,可以有效地帮助团队协作和代码管理。但是,在实际的工作中,我们经常会遇到一些冲突,并且解决冲突有时会失败。这篇文章将讨论一些原因和解决方法。什么是冲突?冲突通常指的是两个或多个成员更改了同一文件或同一行,但...
    99+
    2023-10-22
  • 电脑显示ip冲突怎么办
    当电脑显示IP冲突时,可以尝试以下解决方法:1. 重新启动电脑和网络设备:有时候,简单地重新启动电脑和路由器/交换机等网络设备可以解...
    99+
    2023-08-23
    电脑
  • Bootstrap.css与layDate日期选择样式起冲突怎么办
    这篇文章主要为大家展示了“Bootstrap.css与layDate日期选择样式起冲突怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Bootstrap.c...
    99+
    2024-04-02
  • 亚马逊与谷歌服务器冲突怎么办啊
    亚马逊和谷歌是两个大型的云计算服务提供商,它们都提供了强大的服务器和云计算服务。如果你在使用亚马逊和谷歌的服务器时遇到了冲突,可以尝试以下几种方法来解决问题: 检查服务器配置:首先,你需要检查你的服务器配置是否正确。确保你的服务器设置正...
    99+
    2023-10-27
    亚马逊 冲突 服务器
  • Android 中ScrollView与ListView冲突问题的解决办法
    Android 中ScrollView与ListView冲突问题的解决办法自定义MyListViewpublic class MyListView extends ListView { public MyListView(Context...
    99+
    2023-05-30
    android scrollview listview
  • linux下同名符号冲突怎么办
    小编给大家分享一下linux下同名符号冲突怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!linux 下同名符号冲突问题解决方案最近的工作中遇到如下令人蛋疼的...
    99+
    2023-06-09
  • Keras多线程机制与flask多线程冲突怎么办
    这篇文章给大家分享的是有关Keras多线程机制与flask多线程冲突怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用flask部署Keras,tensorflow等框架时候,经常出现FailedPrec...
    99+
    2023-06-15
  • Bootstrap与UEditor中Css冲突问题怎么解决
    这篇“Bootstrap与UEditor中Css冲突问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面...
    99+
    2024-04-02
  • 云解析记录类型冲突怎么办
    云解析记录类型冲突的解决方法:1.登录域名管理控制台;2.点击“域名管理”;3.选择域名,点击“解析”;4.添加URL跳转记录,在主机名填写a记录解析的域名,记录值填写CNAME记录解析的域名,确认;具体步骤如下:首先,在计算机中进入域名代...
    99+
    2024-04-02
  • usb无线网卡与USB其他设备接口冲突怎么办
    这篇文章主要为大家展示了“usb无线网卡与USB其他设备接口冲突怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“usb无线网卡与USB其他设备接口冲突怎么办”这篇文章吧。点桌面我的电脑,右键...
    99+
    2023-06-28
  • win10系统输入法热键冲突怎么办
    这篇文章主要介绍win10系统输入法热键冲突怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们以微软输入法为例,首先我们点击“M”图标,进入语言首选项。我们在设置窗口中点击左侧的“区域和语言”后在右侧点击“中文...
    99+
    2023-06-28
  • Win11输入法提示热键冲突怎么办
    如果在使用Windows 11输入法时遇到热键冲突问题,可以尝试以下解决方法:1. 更改热键:打开设置(Win + I),选择“系统...
    99+
    2023-08-29
    Win11
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作