一、现象
最近在开发中碰到了一个需求,具体需求如下图。
这是一个很常见的需求,input框负责在点击回车和失焦的时候确认输入。button负责清除输入,input绑定代码为:
input.addEventListener('blur',function(){ console.log('input blur'); }); input.addEventListener('keyup',function(){ console.log('input keyup'); });
"X"绑定的代码为:
button.addEventListener('click', function(e){ console.log('button click'); });
尝试着执行代码,并按照先输入再点击按钮取消的操作,结果如下:
可以看到,input blur在button的click之前触发了,这就导致取消操作其实并没有起到作用。
同时,也能发现事件的执行顺序为(input-blur) -> (button-click);
二、解决方案1
最简单的解决方案为:将button的时间换成onmousedown事件,可以得到如下结果:
事件顺序正确了,但是这种解决方式有两个问题:
a)无法在按下按钮后取消点击
b)控制blur是否执行,需要额外的代码
那么有木有进一步解决方案呢?
三、解决方案2
对button同时绑定mousedown和blur事件即可,具体代码和执行结果如下:
button.addEventListener('mousedown', function(e){ console.log('button mousedown'); e.preventDefault(); }); button.addEventListener('click', function(e){ console.log('button click'); input.blur(); });
这样的方式,就克服了第一种方案的两个弊端,也完美的解决了需求。
四、执行顺序探秘
查询w3c标准后,没有发现关于blur和mousedown,click的顺序说明。根据猜测,blur需要mousedown执行默认事件来触发。所以总结事件顺序应为:mousedown->(other)blur->mouseup->click
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 纯音入心系列纯音乐《中央民族乐团-古筝传奇》1CD[MP3][253.1MB]
- 江玲.1989-这样你才爱我,是吗?【新作有声】【WAV+CUE】
- 郭美美.2010-我是郭美美【华纳】【WAV+CUE】
- 黄心懋1991-轻忧郁【滚石】【WAV+CUE】
- 群星.2000-大地金曲世纪回顾2CD【大地】【WAV+CUE】
- 王菲.1996-浮躁(2024环球MQA-UHQCD限量版)【环球】【WAV+CUE】
- 群星.2022-传家电视剧原声带【东阳欢娱】【FLAC分轨】
- 《摇滚教父 伍佰黄金精选 2CD》 [WAV+CUE][1GB]
- 《凤凰传奇 我从草原来》[WAV/分轨][400MB]
- 《叶倩文 真心真意过一生》[WAV+CUE][400MB]
- 潘越云.1985-世间女子(滚石25周年经典复刻版)【滚石】【WAV+CUE】
- 陈柏宇.2009-CANT.BE.HALF【SONY】【WAV+CUE】
- 李明依.1989-小女生【滚石】【WAV+CUE】
- 《李荣浩 新时代创作新人王》[WAV分轨][310MB]
- 《黑鸭子与马头琴 史上最动听草原音乐》[WAV+CUE][320MB]