blur和click事件冲突
一、问题描述
文本框的blur事件和div元素的click事件出现冲突。
在input的blur事件中,我们隐藏div元素。
在div的click事件中,我们清除input的内容,并隐藏自身。
当我们在input中输入内容后,点击div,希望触发div的click事件,清除input的内容,并隐藏自身。不料先触发了input的blur事件,隐藏了div元素,导致无法完成div的click事件。
二、问题分析
出现上述问题,让人不得不去探索事件执行顺序。
1、在一个input文本框中绑定如下事件,测试执行顺序
onmouseover,onmouseenter,(onmousemove) onmousedown,onfocus,(onmousemove) onmouseup,onclick,(onmousemove) onkeydown,onkeypress,oninput,onkeyup,(onmousemove) onmouseout,onmouseleave,onchange,onblur
2、在一个文本框和div标签中都绑定事件,测试执行顺序
【input】 onmouseover,onmouseenter,(onmousemove) onmousedown,onfocus,(onmousemove) onmouseup,onclick,(onmousemove) onkeydown,onkeypress,oninput,onkeyup,(onmousemove) onmouseout,onmouseleave, 【div】 onmouseover,onmouseenter,(onmousemove) onmousedown 【input】 onchange,onblur 【div】 (onmousemove) onmouseup,onclick,(onmousemove) onmouseout,onmouseleave
3、mouseover和mouseenter的区别
不论鼠标指针穿过被选元素或其子元素,都会触发mouseover事件。
只有在鼠标指针穿过被选元素时,才会触发mouseenter事件。
4、mouseout和mouseleave的区别
mouseout事件会冒泡,子节点的mouseout事件会冒泡到父节点,进而触发父节点的mouseout事件。
mouseleave事件就没有这种效果,所以离开子节点时,不会触发父节点的监听函数。
三、解决方案
1、为blur添加延迟
dom_input.addEventListener('blur',function(e){ setTimeout(function () { dom_div.style.display = "none"; }, 200); },true);
让div延时隐藏,可以解决div无法被点击的问题。但设置多久的延时是一个难以两全的问题,时间太短不能保证click事件的100%触发,时间太长则会造成卡顿的感觉,影响用户体验。因此,设置延时并不是该问题的最佳解决方案。
2、blur事件的动态绑定
//鼠标进入div区域,取消文本框的blur事件绑定 var fn = function(e){ dom_div.style.display = "none"; } dom_div.addEventListener('mouseenter',function(e){ dom_input.removeEventListener("blur", fn, false); },true); //鼠标移出div区域,为文本框绑定blur事件 dom_div.addEventListener('mouseleave',function(e){ dom_input.addEventListener("blur", fn, true); },true);
3、mousedown代替click
dom_input.addEventListener('blur',function(e){ dom_div.style.display = "none"; },true); dom_div.addEventListener('mousedown',function(e){ dom_input.value =''; dom_div.style.display = "none"; },true);
blur和click事件冲突的更多相关文章
- 下拉选择的blur和click事件冲突了
当写个下拉选择框时我们希望当input失去焦点时,下拉框消失,或者当选择下拉框中的内容的同时将内容填入input并且使下拉框消失. 这时候我们会想到blur和click,单独使用的时候是没有问题的,但 ...
- jquery href属性和click事件冲突
a标签的定义如下: <a href="javascript:void(0);">test</a> jquery中的click事件: $("a&qu ...
- js(jquery)解决input元素的blur事件和其他非表单元素的click事件冲突的方法
HTML结构:很简单,就一个input,一个div,能说明问题就OK了: <input type="text" value="默认值"><br ...
- onblur事件和click事件冲突
在js中onblur事件的优先级click事件,所以同一个元素上绑定两个事件的时候,onblur事件会冲掉click事件. 解决方案:将click事件改成mousedown事件
- 移动端touch拖动事件和click事件冲突问题解决
通过一个悬浮球交互功能的案例来阐述问题,以及解决办法. 实现效果 类似微信里的悬浮窗效果,苹果手机的悬浮球功能效果 可以点击拖动,然后吸附在窗口边缘 点击悬浮球,可以跳转界面,或者更改悬浮球的形态 准 ...
- blur和click事件的先后顺序问题
这两个同时用会有冲突.懒得翻译了,需要的自己看哈. 以下摘自stackoverflow. I have an input field, where I try to make autocomplete ...
- Vue--el-menu 的自动跳转功能与自己的click事件冲突
一\先看elementUI说明 项目实际 此时点击活导航时以 index 作为 path 进行路由跳转 那么此时不要onclik事件了 如果此时有在有click 就
- HTML A标签 href click事件冲突
转自:https://blog.csdn.net/xinglu/article/details/45199337
- 快速解决js开发下拉框中blur与click冲突
在开发中我们会经常遇到blur和click冲突的情况.下面叙述了开发中常遇到的"下拉框"的问题,并提供了两种解决方案. 一.blur和click事件简述 blur事件:当元素失去焦 ...
随机推荐
- 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) ubuntu 安装vim 及遇到的错误处理
今天,处理完问题,闲来无事,打算在虚拟机中的Ubuntu中练习shell脚本编写. 无奈,虚拟机系统所装的只有vi,这个编辑软件对于我们来说还是比较不习惯的,所以打算安装vim.好了,闲言少叙. 安装 ...
- BSGS及扩展BSGS算法及例题
\(BSGS(baby-step-giant-step)\)算法是用来解高次同余方程的最小非负整数解的算法,即形如这个的方程: \(a^x\equiv b(mod\ p)\) 其中\(p\)为质数(其 ...
- Redux Counter Vanilla example
此示例不需要构建系统或视图框架,并且存在以显示与ES5一起使用的原始Redux API. 代码如下 <!DOCTYPE html> <html> <head> &l ...
- 什么是Tensor
https://blog.csdn.net/kansas_lh/article/details/79321234 tensor是tensorflow基础的一个概念——张量. Tensorflow用到了 ...
- 什么是javabean及其用法(转)
因工作需要 需要学习jsp方面的知识 这篇博客文章写得比较全面 我记录下: 一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个 ...
- Linux设备树(六 memory&chosen节点)
六 memory&chosen节点 根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点.memory节点用来描述硬件内存布局的.如果有多块内存,既可以通过多个memo ...
- windows telnet 模拟 http请求
1. 开启windows自带的telnet客户端(控制面板 --> 程序 --> 启用或关闭windows功能 --> ) 2. 打开cmd,使用Telnet客户端 3. 按ctrl ...
- 缓存服务—Redis
Redis 简介Redis 是一个开源(BSD 许可)的.内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 为什么要用 Redis 在高并发场景下,如果需要经常连接结果变动频繁的数据库, ...
- crm 动态一级二级菜单
之前代码菜单是写是的 如何 让他 动态 生成了 首先 添加 2个字段 admin.py 更改 显示 from django.contrib import admin from rbac import ...
- TPS、并发用户数、吞吐量关系
TPS.并发用户数.吞吐量关系 摘要 主要描述了在性能测试中,关于TPS.并发用户数.吞吐量之间的关系和一些计算方法. loadrunner TPS 目录[-] 一.系统吞度量要素: 二.系统吞吐量评 ...