如何当弹出的div失去焦点的时候自动隐藏(JS如何模拟鼠标点击X,Y坐标)

10 篇文章 0 订阅
3 篇文章 0 订阅

在开发中,我们经常会使用div作为弹出框,比如自定义select,搜索input的历史记录框等等,但是如何当弹出的div失去焦点的时候自动隐藏呢?
下面我总结了几个方法:

第一种
在document.body上注册一个click事件的函数,然后判断下当前的click的事件的Element是否等于那个div,不是的话就消失。
例子:
定义一个点击input和一个id为box的弹出框

<style>
 #box{width:100px;height:100px;background:blue;display:none;}
</style>
<div id="box">
</div>
<input type="button" id="button" value="show" />

这里,我们使用jQuery来处理

$("#button").click(function(event){
     $("#box").show();
    event.stopPropagation();  //阻止冒泡
});
$("body").click(function(){
     $("#box").hide();
})
$('#box').click(function(){
     return false;
});

第二种

定义一个点击input和一个id为box的弹出框,还有一个id为mask全屏透明的遮罩层

<style>
#mask{position:absolute;top:0;left:0;width:100%;height:100%;z-index:11;background:rgba(0,0,0,0);}    #box{position:absolute;top:0;left:0;width:100px;height:50px;z-index:10;}
</style>
<div id="box">
</div>
<input type="button" id="button" value="show" />
<div id="mask"></div>

接下来是jQuery代码

$("#button").click(function(event){
    $("#box").show();
    $("#mask").show();
    event.stopPropagation();  //阻止冒泡
});
$('#mask').click(function(){
    $("#box").hide();
    $("#mask").hide();
});

第三种

利用tabindex,让div能获取到焦点

<style>
#box{width:100px;height:100px;background:blue;display:none;}
</style>
<div id="box" tabindex="1">
</div>
<input type="button" id="button" value="show" />

再来看看jQuery如何实现的:

$("#button").click(function(event){
    $("#box").show();
    $("#box").focus();
    event.stopPropagation();  //阻止冒泡
});
$('#box').blur(function(){
    $("#box").hide();
});

JS如何模拟鼠标点击X,Y坐标

<!DOCTYPE html>
<html>
    <body>
        <script>
            function imitateClick(oElement, iClientX, iClientY) {
                var oEvent;
                if (document.createEventObject) { //For IE
                    oEvent = document.createEventObject();
                    oEvent.clientX = iClientX;
                    oEvent.clientY = iClientY;
                    oElement.fireEvent("onclick", oEvent);  
                } else {
                    oEvent = document.createEvent("MouseEvents");
                    oEvent.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 
                                          iClientX, iClientY/*, false, false, false, false, 0, null*/); 
                    oElement.dispatchEvent(oEvent);
                }
            }
            var body = document.body;
            body.onclick = function(event) {
                alert("clicked at (" + event.clientX + "," + event.clientY + ")");
            };
            imitateClick(body, 100, 100);
        </script>
    </body>
</html>

转载地址:http://ghmagical.com/article/page/id/wklcyjv80m6Z

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值