解决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 相关文章推荐
索趣科技的答案
Feb 07 Javascript
Prototype RegExp对象 学习
Jul 19 Javascript
javascript针对DOM的应用实例(一)
Apr 15 Javascript
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
javascript中数组的concat()方法使用介绍
Dec 18 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
简单实现js放大镜效果
Jul 24 Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 Javascript
React-redux实现小案例(todolist)的过程
Sep 29 Javascript
vue中的循环对象属性和属性值用法
Sep 04 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调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php教程之phpize使用方法
2014/02/12 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php文件上传类完整实例
2016/05/14 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
javascript 写类方式之一
2009/07/05 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Django开发中的日志输出的方法
2018/07/02 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
python selenium操作cookie的实现
2020/03/18 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
测绘工程本科生求职信
2013/10/10 职场文书
爱国演讲稿400字
2014/05/07 职场文书
产品包装策划方案
2014/05/18 职场文书
城市创卫标语
2014/06/17 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript