码迷,mamicode.com
首页 > 其他好文 > 详细

下拉选择的blur和click事件冲突了

时间:2018-01-25 15:41:25      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:down   input   判断   log   list   下拉   div   click   put   

当写个下拉选择框时我们希望当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事件冲突了

标签:down   input   判断   log   list   下拉   div   click   put   

原文地址:https://www.cnblogs.com/FarmanKKK/p/8350952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!