下拉选择的blur和click事件冲突了
当写个下拉选择框时我们希望当input失去焦点时,下拉框消失,或者当选择下拉框中的内容的同时将内容填入input并且使下拉框消失。
这时候我们会想到blur和click,单独使用的时候是没有问题的,但一旦放到一起就会发现你点击了下拉选项中的li时,直接触发了blur事件,而且对li的click事件之后的判断是否是点击li还是仅仅input失去焦点这个判断执行失败了
例如
$('#productName').blur(function(){
var chooseProduct = 0;
$('.product-list').on('click','li',function(){
chooseProduct = 1;
$('#productName').val($(this).text());
productId = $(this).data('id');
$('#productId').val(productId);
$('.product-list').hide();
});
if(chooseProduct == 1){
console.log('执行选择产品操作');
}else{
console.log('仅仅是失去焦点操作,隐藏下拉');
$('.product-list').hide();
}
});
这时候你会发现chooseProduct一直是为0的
解决方法1:
$('#productName').blur(function(){
var chooseProduct = 0;
$('.product-list').on('click','li',function(){
chooseProduct = 1;
$('#productName').val($(this).text());
productId = $(this).data('id');
$('#productId').val(productId);
$('.product-list').hide();
});
setTimeout(function(){
if(chooseProduct == 1){
console.log('执行了选择操作');
}else{
console.log('仅仅失去焦点,隐藏下拉');
$('.product-list').hide();
}
},200)
});
但是毕竟setTimeout还是可以感觉到延迟的
因此更好的选择是使用mousedown
方法2:
$('#productName').blur(function(){
var chooseProduct = 0;
if(chooseProduct == 1){
console.log('chooseProduct=' + chooseProduct);
}else{
console.log('chooseProduct=' + chooseProduct);
$('.product-list').hide();
}
});
$('.product-list').on('mousedown','li',function(){
chooseProduct = 1;
$('#productName').val($(this).text());
productId = $(this).data('id');
$('#productId').val(productId);
$('.product-list').hide();
});

下拉选择的blur和click事件冲突了的更多相关文章
- 快速解决js开发下拉框中blur与click冲突
在开发中我们会经常遇到blur和click冲突的情况.下面叙述了开发中常遇到的"下拉框"的问题,并提供了两种解决方案. 一.blur和click事件简述 blur事件:当元素失去焦 ...
- blur和click事件冲突
一.问题描述文本框的blur事件和div元素的click事件出现冲突.在input的blur事件中,我们隐藏div元素.在div的click事件中,我们清除input的内容,并隐藏自身.当我们在inp ...
- jQuery插件——下拉选择框
其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $. ...
- h5手机端下拉选择城市
<!doctype html><html> <head> <meta http-equiv="Content-Type& ...
- CSS3不一样的下拉选择框
本例中包含两个下拉选择框的动画示例,本例中并未使用select标签.本例中第一个案例也可用于标题.导航栏等位置. 案例一: html布局 <div class="content&quo ...
- 基于jQuery美化联动下拉选择框
今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...
- ul+jquery自定义下拉选择框
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框)
[源码下载] 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框) 作者:webabcd 介绍背水一战 Wind ...
- Jquery获取下拉选择节点名称值赋给textbox文本框 获取 父节点的栏目名称编号
<label for="parentNode" style="float:left" >父级栏目:</label> <select ...
随机推荐
- mysql 5.7 修改root密码允许远程连接
1.修改root密码(其他用户类似) 试过网上看的一些 在mysql数据库执行 update user set password='新密码' where user='root' 执行说找不到字段, ...
- 使用Supervisord软件管理go服务进程
一.介绍Supervisord软件1.什么是Supervisord?Supervisord是一个非常优秀的进程管理工具,使用Python开发.它可以在类UNIX系统的方式让用户来准确地监视和控制后台一 ...
- 图解再谈ssh port forwarding-ssh隧道技术
https://www.ramkitech.com/2012/04/how-to-do-ssh-tunneling-port-forwarding.html https://www.cnblogs.c ...
- Ubuntu 18.04 RTX2080(ti) + tensorflow-gpu + cuda9.0 + gcc5 兼容性问题解决
0.下载display driver.cuda和cudnn RTX2080 Display Driver cuda cudnn 1. 禁止系统默认的显卡驱动 打开系统黑名单 sudo gedit /e ...
- 使用国内作者制作的gcr.io镜像安装工具
项目地址:https://github.com/zhangguanzhang/gcr.io How to use? 拉取 假设需要拉取gcr.io/google_containers/pause:3. ...
- Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif
Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif 一丶__str__ 和 __repr__ ...
- Django:RestFramework之-------频率控制
5.频率控制 5.1频率监控代码实现 import time VISIT_RECORD = {} class VisitThrottle(object): def __init__(self): #定 ...
- vavr:让你像写Scala一样写Java
本文阅读时间大约7分钟. Hystrix是Netflix开源的限流.熔断降级组件,去年发现Hystrix已经不再更新了,而在github主页上将我引导到了另一个替代项目--resilience4j,这 ...
- springmvc核心流程
用户请求DispathcerServlet(前端控制器). (前端控制器)DispatcherServlet接受到请求,将根据请求信息交给处理器映射器(HandlerMapping). 处理器映射器( ...
- Bootstrap。
bootstrap: 1.概念:前端开发框架. 2.快速入门:下载bootstrap.导入文件. 3.响应式布局: * 同一套页面可以兼容不同分辨率的设备. * 实现:依赖于栅格系统:将一行平均分成1 ...