解决Js先触发失去焦点事件再执行点击事件的问题


Posted in Javascript onAugust 30, 2018

最近在做公司的某个从项目,基本设计和淘宝登陆页类似:

1)文本框内容为空是,文本框右侧无清除按钮,当有内容时立即显示清除按钮;

2)当文本框失去焦点时,清除按钮消失,获取焦点时若文本框内有内容,则显示清除按钮,否则不显示;

3)文本框再有内容且获取焦点的情况下,点击清除按钮,文本框内容置空,且清除按钮消失。

随后想了想,感觉是个很简单的需求,只要结合使用keyup和blur以及click时间就可以解决了,然而,结果却不是我想要的,代码如下:

html代码:

<div class="input-group">
 <input type="text" id="mobile" class="form-control" placeholder="请输入手机号" autocomplete="off" />
 <div class="input-group-addon icon-clear"></div>
</div>

js代码:

//绑定监听手机号文本框内容按钮事件
$('#mobile').keyup(function() {
 var clearBtn = $(this).parent().find('.icon-clear');
 if($(this).val() == '') { clearBtn.hide(); } 
 else { clearBtn.css('display', 'table-cell'); }
});
//手机号输入框失去焦点,去除清除按钮;获取焦点时,若有值则显示清除按钮
$('#mobile').blur(function() {
 $('#mobile').parent().find('.icon-clear').hide();
}).focus(function(){
 if($(this).val() != ''){
  $(this).parent().find('.icon-clear').css('display', 'table-cell');
 }
});
//清除文本框内容事件
$('.icon-clear').click(function() {
 $(this).parent().find('input').val('');
 $(this).hide();
});

这样看着像是什么问题都没有的样子,其实不然,运行之后发现,在文本框中输入内容后文本框获取焦点,这个时候我想要去点击清除按钮来清除刚才我写的东西,发现,文本框内容没有置空,清除按钮却先消失了,很纳闷啊。

后来经查阅发现,是先执行的失去焦点事件,那么如何去解决呢?

而后,我在失去焦点事件中对其中的方法进行了延迟处理,如下所示:

//验证码输入框失去焦点,去除清除按钮;获取焦点时,若有值则显示清除按钮
$('#auth_code').blur(function() {
 setTimeout(function() { //进行延时处理,时间单位为千分之一秒
  $('#auth_code').parent().find('.icon-clear').hide();
 }, 100)
}).focus(function(){
 if($(this).val() != ''){
  $(this).parent().find('.icon-clear').css('display', 'table-cell');
 }
});

如此操作后就可以完美解决了,目前未发现任何副作用。

以上这篇解决Js先触发失去焦点事件再执行点击事件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery学习3:操作元素属性和特性
Feb 07 Javascript
js中将具有数字属性名的对象转换为数组
Mar 06 Javascript
javascript中的缓动效果实现程序
Dec 29 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
Feb 28 Javascript
jQuery的promise与deferred对象在异步回调中的作用
May 03 Javascript
微信小程序开发(二)图片上传+服务端接收详解
Jan 11 Javascript
Angularjs使用指令做表单校验的方法
Mar 31 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 #Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 #Javascript
在Vue methods中调用filters里的过滤器实例
Aug 30 #Javascript
vue 根据数组中某一项的值进行排序的方法
Aug 30 #Javascript
对vue中methods互相调用的方法详解
Aug 30 #Javascript
原生JS+HTML5实现的可调节写字板功能示例
Aug 30 #Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 #Javascript
You might like
各种战术和打法的原创者
2020/03/04 星际争霸
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python多线程扫描端口示例
2014/01/16 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
python os.listdir()乱码解决方案
2021/01/31 Python
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
先进德育工作者事迹材料
2014/01/24 职场文书
健康家庭事迹材料
2014/05/02 职场文书
校园活动策划方案
2014/06/13 职场文书
幼儿园六一主持词
2015/06/30 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
详解Python为什么不用设计模式
2021/06/24 Python