<!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>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
div{height:100px; width:100px; background:red}
span{height:20px; width:20px; background:blue}
</style>
</head><body>
<div id="div1"><span id="span1">xxxx</span></div><br>
<input type=text id=txt value="">
</body>
</html>
<script type="text/javascript">document.getElementById("div1").onmouseover =aa;
document.getElementById("div1").onmouseout = bb;function aa()
{
if(event.toElement.tagName!="SPAN")
document.getElementById("txt").value="鼠标在div里";
}
function bb()
{
document.getElementById("txt").value="鼠标在div外";
}</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
div{height:100px; width:100px; background:red}
span{height:20px; width:20px; background:blue}
</style>
</head><body>
<div id="div1"><span id="span1">xxxx</span></div><br>
<input type=text id=txt value="">
</body>
</html>
<script type="text/javascript">document.getElementById("div1").onmouseover =aa;
document.getElementById("div1").onmouseout = bb;function aa()
{
if(event.toElement.tagName!="SPAN")
document.getElementById("txt").value="鼠标在div里";
}
function bb()
{
document.getElementById("txt").value="鼠标在div外";
}</script>
onmouseover="window.event.cancelBubble=true"
onmouseout="window.event.cancelBubble=true"
就可以了:
cancelBubble:设置或获取当前事件是否要在事件句柄中向上冒泡。<!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>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
div{height:100px; width:100px; background:red}
span{height:20px; width:20px; background:blue}
</style>
</head><body>
<div id="div1"><span id="span1" onmouseover="window.event.cancelBubble=true" onmouseout="window.event.cancelBubble=true">xxxx</span></div><br/>
<input type=text id=txt value="">
</body>
</html>
<script type="text/javascript">document.getElementById("div1").onmouseover =aa;
document.getElementById("div1").onmouseout = bb;function aa()//鼠标移入span里不执行
{
document.getElementById("txt").value="鼠标在div里";
}
function bb()//鼠标从span里移出不执行
{
document.getElementById("txt").value="鼠标在div外";
}</script>
只是将<span>的onmouseover和onmouseout事件不传导到<div>上,跟<div>自身的事件没关系...
如将上面代码换成下面:
可以看到从红色区域进入到蓝色区域(或从蓝色区域进入红色区域)都是先执行了bb,再执行了aa,
而本意是不执行任何函数.
之所以文本框里没变化,是因为先执行了bb再执行aa,速度过快,看不出文本框的变化,其实是执行了的.<!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>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
div{height:100px; width:100px; background:red}
span{height:20px; width:20px; background:blue}
</style>
</head><body>
<div id="div1"><span id="span1" onmouseover="window.event.cancelBubble=true" onmouseout="window.event.cancelBubble=true">xxxx</span></div><br/>
<input type=text id=txt value="">
</body>
</html>
<script type="text/javascript">document.getElementById("div1").onmouseover =aa;
document.getElementById("div1").onmouseout = bb;function aa()//鼠标移入span里不执行
{
//document.getElementById("txt").value="鼠标在div里";
alert("执行了aa");
}
function bb()//鼠标从span里移出不执行
{
//document.getElementById("txt").value="鼠标在div外";
alert("执行了bb");
}</script>
可以看到从红色区域进入到蓝色区域(或从蓝色区域进入红色区域)都是先执行了bb,再执行了aa
------------
没这回事,至少IE测试通过,从红色区域进入到蓝色区域执行bb,从蓝色区域进入红色区域执行aa
IE7没装
firefox下从红色区域进入到蓝色区域(或从蓝色区域进入红色区域)都是先执行了bb,再执行了aa<script type="text/javascript">
var i =0
document.getElementById("div1").onmouseover =aa;
document.getElementById("div1").onmouseout = bb;function aa()//鼠标移入span里不执行
{
i++;
document.getElementById("txt").value=i;
//alert("执行了aa");
}
function bb()//鼠标从span里移出不执行
{
i++;
document.getElementById("txt").value=i;
//alert("执行了bb");
}</script>
--
可能是我没说明白,要的效果如下...
1 当没有span的时,页面只有个100x100的红色div区域,当进出这个红色区域会发生事件,但在这个红色区域"内移动"(这里是关键)是"不会触发任何事件"的.2 现在给页面加上一个20x20的蓝色span区域后,我们在原红色div区域"内移动"变成会"产生事件"了(原因是span覆盖了一部分div,此时无论是我们从span内过渡到div内,还是从div内过渡到span内,都要产生事件),而因div包含了span,这些过渡实际还是发生在100x100的范围里,我们的鼠标也一直没出div区域,这就与第1条完全的不一样,这是不愿看到的效果.3能不能弄成,即使在加了span的情况下,在那100x100的div区域内任意移动都不产生事件(屏蔽事件)
以前我也遇到类似的问题,
是关于menu的
没有别的办法,只能瞎搞啦
-----------------
我是这么做的:
-----------------
事件 不直接指向 所要执行的 响应函数
而是指向另外一个“中间”函数(就那个意思啦)这个“中间”函数再调用那个 实际的响应函数关键在于如何调用,和怎样取消调用我用settimeout来调用
试想:
当鼠标从div 移到到 span 上面
这个过程所需的 时间间隔 理论上为零我们的 settimeout 是需要一定时间间隔后才执行的就是说 span 的 onmouseover 事件产生后 settimeout 的目标函数还没有执行因此,我们可以利用这个时间差 来取消那个函数的执行 (即用cleartimeout)-----------
大概就是这个意思,其他情况类似,
希望对你解决此类问题有用
你这想法确实强的!