解决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 相关文章推荐
通过判断JavaScript的版本实现执行不同的代码
May 11 Javascript
jquery ajax 局部无刷新更新数据的实现案例
Feb 08 Javascript
jQuery中Ajax的get、post等方法详解
Jan 20 Javascript
网页从弹窗页面单选框传值至父页面代码分享
Sep 29 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
Oct 29 Javascript
Bootstrap使用基础教程详解
Sep 05 Javascript
jQuery动态增减行的实例代码解析(推荐)
Dec 05 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
Dec 22 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
Mar 08 Javascript
BootStrap入门学习第一篇
Aug 28 Javascript
JavaScript正则表达式和级联效果
Sep 14 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 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
PHP include_path设置技巧分享
2011/07/03 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python 实现红包随机生成算法的简单实例
2017/01/04 Python
Python的多维空数组赋值方法
2018/04/13 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
想学画画?python满足你!
2020/12/24 Python
JS原生实现轮播图的几种方法
2021/03/23 Javascript
装潢设计实习自我鉴定
2013/09/19 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
法人任命书范本
2014/06/04 职场文书
学校消防安全责任书
2014/07/23 职场文书
小学生春游活动方案
2014/08/20 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python