html 点击div 内部不隐藏,点击div外部则隐藏


实现效果:点击div 内部不隐藏,点击div外部则隐藏

网上找到的办法基本上是:

实现该div的click事件,并阻止冒泡。

实现document的click事件,隐藏该div。

 

这方法,有个bug,如果点击的元素的click,也阻止了冒泡,则无法实现效果。

 

本淫想到另一办法。使用focusin,focusout来实现。(貌似只有IE支持onfocusout,onfocusin)。查阅有关资料:onfocusout,onfocusin可冒泡。onfocus,onblur不支持冒泡。

设置div可获得焦点,添加属性 tabindex = "-1"。

使用jquery,不管浏览器的差异。

var divNode = $(该div);

//设置设div获得焦点

divNode.focus();

var t = 0;

 divNode.bind("focusout", function() {
     t = setTimeout(function() {
           divNode.hide();
     }, 0);
    return false;
 });
 
 divNode.bind("focusin", function() {
     if (t != null) {
          clearTimeout(t); 
     }
     return false;
 });

这种方法bug是,tab切焦,会触发隐藏,单击滚动条不会隐藏。

浏览表现存在差异。

IE下点击地址栏,搜索栏,会触发隐藏。点该div的内部没有焦点的元素一样会触发focusout。而chrome则不会。(FF没有测试,本淫恶心FF!!!)

 

测试代码如下:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

</head>
<body >
<div> <span id="test1btn"/>显示方法1div</span><span id="test2btn"/>显示方法2div</span></div>

<div id='test1' style="display:none;  background:rgb(0,153,255)">
<div style="width:100px; height:200px; background-color:rgb(204,204,204)">我是方法1内部元素</div>
</div>


<div id='test2' tabIndex="-1" style="display:none; background:rgb(153,153,153)">
<div style="width:100px; height:200px; background-color:rgb(0,153,255)">我是方法2内部元素</div>
</div>
<div style="width:100px; height:200px; background-color:rgb(255,204,153)" id="noBubble">我阻止了click冒泡,点我试试看。</div>
<script type="text/javascript">
$(function(){
	var divNode2 = $("#test2");
	var divNode1 = $("#test1");
	var t = null;	
	$("#test2btn").click(function() {
		divNode2.css("display", "block");
		//这里用jq的focus不能得到焦点。为什么?我想知道,谁能告诉我。难道不支持div获得焦点?
		//divNode2.focus();
		//js原生态可以使div获得焦点。
		document.getElementById("test2").focus();

	});
	divNode2.bind("focusout", function() {
		t = setTimeout(function() {
			divNode2.hide();
		}, 0);
		return false;
	});
	
	divNode2.bind("focusin", function() {
		if (t != null) {
			clearTimeout(t);	
		}
		return false;
	});
	$("#test1btn").click(function() {
		divNode1.show();
		return false;
	});
	divNode1.click(function() {
		return false;
	});
	$(document).click(function(){
		divNode1.hide();
	});
	$("#noBubble").click(function(){return false;});
});
</script>
</body>
</html>

 走过,路过,过来看看,点评点评,学习学习!

你可能感兴趣的:(html,jquery,function,XHTML,null,div)