博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
下拉选择的blur和click事件冲突了
阅读量:4654 次
发布时间:2019-06-09

本文共 1962 字,大约阅读时间需要 6 分钟。

当写个下拉选择框时我们希望当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();        });

转载于:https://www.cnblogs.com/FarmanKKK/p/8350952.html

你可能感兴趣的文章
经常用得到的安卓数据库基类
查看>>
vue element 关闭当前tab 跳转到上一路由
查看>>
4、面向对象
查看>>
[NOI2005]聪聪与可可(期望dp)
查看>>
POJ 3723
查看>>
Elgg网站迁移指南
查看>>
Sublime Text 3 及Package Control 安装(附上一个3103可用的Key)
查看>>
基于uFUN开发板的心率计(一)DMA方式获取传感器数据
查看>>
【dp】船
查看>>
oracle, group by, having, where
查看>>
⑥python模块初识、pyc和PyCodeObject
查看>>
nodejs pm2使用
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
sql语句的各种模糊查询语句
查看>>
C#操作OFFICE一(EXCEL)
查看>>
【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
查看>>
移动端单屏解决方案
查看>>
web渗透测试基本步骤
查看>>
使用Struts2标签遍历集合
查看>>