微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

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

HTML代码

rush:xhtml;">

js代码

rush: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(); });

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

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

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

rush:js;"> //验证码输入框失去焦点,去除清除按钮;获取焦点时,若有值则显示清除按钮 $('#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先触发失去焦点事件再执行点击事件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

原文地址:https://www.jb51.cc/js/30617.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐