在开发中我们会经常遇到blur和click冲突的情况。下面叙述了开发中常遇到的“下拉框”的问题,并提供了两种解决方案。
一、blur和click事件简述
blur事件:当元素失去焦点时触发blur事件;其为表单事件,blur和focus事件不会冒泡,其他表单事件都可以。
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>
/** 说明:
* 目前通过ul外层div自定义属性“data-status”控制其是否显示
*/
(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);
版权声明:本文为博主原创文章,未经博主允许不得转载。转载请标明出处:http://blog.csdn.net/ligang2585116! http://blog.csdn.net/ligang2585116/article/details/51764828
分享到:
相关推荐
在开发中我们会经常遇到blur和click冲突的情况。下面叙述了开发中常遇到的“下拉框”的问题,并提供了两种解决方案。 一、blur和click事件简述 blur事件:当元素失去焦点时触发blur事件;其为表单事件,blur和focus...
以上就是针对`blur`和`click`事件冲突的几种常见解决方案。根据具体的应用场景和需求,可以选择最合适的策略来优化用户体验。在实际开发中,我们需要考虑到各种交互细节,以确保用户能够流畅地与我们的应用程序进行...
资源分类:Python库 所属语言:Python 资源全名:blur-clip-board-image-cli-0.0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《Unity-URP-UI-Blur(2022.2):打造高效模糊效果》 Unity是一款广泛应用于游戏开发、虚拟现实、增强现实等领域的强大引擎,它提供了丰富的工具和资源来帮助开发者构建视觉效果丰富的场景。在2022.2版本中,Unity...
这个模板比较有现代感; 而且一次就给2套; 不过是为 Angular 量身定做的; 下面的 demo 链接需要才可正常浏览; demo1:http://akveo.com/blur-admin-mint/#/dashboard
Blur-LIB-Android 库通过硬件加速解决了这个问题,使得模糊处理更加流畅,用户界面更加响应迅速。 该库的使用方法通常包括以下几个步骤: 1. 添加依赖:在项目的 build.gradle 文件中,添加 Blur-LIB-Android 的...
对于部分隐藏元素很有用,当内容还没准备好时,可以与微调器一起使用它。安装$ npm install --save v-blur$ yarn add v-blur绑定值绑定值可以是布尔值或对象。 如果提供了布尔值,则伪指令将,和使用默认值。 要...
Translucent Image - Fast UI Background Blur v3.16.0.unitypackage
此外,由于"blur-admin"通常是一个基础框架,实际应用中还需要与其他后端服务进行集成,例如与Node.js、Java、Python等后端语言的API接口配合,实现数据的增删查改。因此,熟悉RESTful API设计和JSON数据格式也是必...
《Unity中的半透明图像与快速模糊背景UI技术详解》 在Unity引擎中,开发者们经常追求为用户界面(UI)创造出美观且引人入胜的效果。"Translucent Image - Fast Blurred Background UI 3.2.2.zip" 文件提供了一个...
### 图像局部模糊检测与分类 #### 摘要与背景 本文提出了一种局部模糊图像分类和分析框架,该框架能够自动检测包含模糊区域的图像,并识别这些区域的模糊类型,而无需进行模糊核估计或图像去模糊操作。文中开发了...
opencv之模糊人脸,匿名化处理,保护隐私。有高斯模糊人脸和像素模糊人脸两种方法。Python版本,文章地址:https://blog.csdn.net/y459541195/article/details/105622103
标题“Blur-Everything-Except-The-Hovered”指的是一个网页设计技术,它通过CSS和JavaScript实现了一种特效:当鼠标悬停在特定元素上时,该元素保持清晰,而周围的所有其他内容则变得模糊。这种效果可以用于创建...
本项目“Blur-and-Glare-Detection-opencv”专注于利用OpenCV对图像中的模糊和眩光进行检测。 1. **模糊检测**: - **高斯滤波器**:模糊通常由相机的低分辨率或运动模糊引起。OpenCV中的`cv2.GaussianBlur()`函数...
@react-native-community/blur 一种UIVisualEffectView的iOS上的模糊和活力的效果,和组件在Android上。 内容 安装 使用Yarn安装库: yarn add @react-native-community/blur 或npm: npm install --save @react-...
在提供的"blur-state-demo-1-master"压缩包文件中,可能包含了实现模糊状态的示例代码,包括HTML结构、CSS样式和JavaScript脚本。通过学习和分析这个示例,你可以更深入地理解如何在实际项目中应用模糊状态效果。这...
总结,理解和掌握click与blur事件的执行顺序对于编写高效、无误的JavaScript交互代码至关重要。在遇到类似的问题时,可以通过调整事件绑定或利用事件的特性(如preventDefault())来实现预期的交互效果。同时,不断...
varying blur》是2010年计算机视觉领域重要会议CVPR(Computer Vision and Pattern Recognition)上发表的一篇研究论文,主要探讨了空间可变模糊(spatially-varying blur)问题的分析与解决策略。在图像处理和...