jquery 当div失去焦点时,如何隐藏它?

kx1ctssn  于 2022-12-18  发布在  jQuery
关注(0)|答案(3)|浏览(257)

基本上我正在尝试实现一个像新的twitter那样的登录。当你点击登录时,一个带有字段的div会弹出。现在当我点击div之外的任何地方(div失去焦点),那么div应该会消失。
我已经尝试了How to blur the div element?中提到的技术
代码如下所示:

$("body").click(function(evt) {
            
            if (evt.target.id !== 'loginDialog') {
                $("#loginDialog").hide();
            }
        });

这样做的问题是target.id将不等于loginDialog,即使我单击loginDialog中的某个地方,比如在子div中。
因此,上述是一个很好的方向,但解决方案是不完整的。
实现这一目标的最佳途径是什么?

rkkpypqq

rkkpypqq1#

如果将鼠标移到外部还不够,并且您希望它仅在用户单击鼠标外部时才消失,那么下面的代码片段可能会对您有所帮助。

$('body').click(function(evt) {
    if($(evt.target).parents('#loginDialog').length==0) {
        $('#loginDialog').hide();
    }
});
rqcrx0a6

rqcrx0a62#

各种示例中,最好使用iframe http://fancybox.net/的jquery fancybox插件
[更新]::抱歉愚蠢的假设代码。检查工作代码

<script type="text/javascript">
    $(function (){
        $(document).click(
            function (e){
                var blur = $('#blur');
                var position = $(blur).position();
                var height = $(blur).height();
                var width = $(blur).width();

                if((e.clientX > position.left && e.clientX < position.left + width) && 
                    (e.clientY > position.top && e.clientY < position.left + height)
                ){
                    alert(e.clientX+' '+e.clientY);

                }
                else{       
                    /*Hide the div*/                    
                        $('#blur').hide();
                    /*Hide the div*/

                }

            }
        )
    })
</script>
<div id="blur">Blur me</div>
nnsrf1az

nnsrf1az3#

不是很好的做法,但可能会起作用。

$('body').click(function(){
     $('#loginDialog').hide();     

});
$('#loginDialog').click(function(evt){
    evt.stopPropagation();
});

相关问题