if(typeof(HTMLElement)!="undefined") //给firefox定义contains()方法,ie下不起作用
{
HTMLElement.prototype.contains=function(obj)
{
while(obj!=null&&typeof(obj.tagName)!="undefind"){ //通过循环对比来判断是不是obj的父元素
if(obj==this) return true;
obj=obj.parentNode;
}
return false;
};
}
isFirefox = /firefox/.test(navigator.userAgent.toLowerCase());
function muOutTop(theEvent){ //theEvent用来传入事件,Firefox的方式
if (theEvent){
var hmTopID = document.getElementById(''hmMenuTop'');
if (isFirefox){ //如果是Firefox
if (hmTopID.contains(theEvent.relatedTarget)) { //如果是子元素
return; //结束函式
}
}else{
if (hmTopID.contains(event.toElement)) { //如果是子元素
return; //结束函式
}
}
}
SwhMenu(MD);
/*要执行的操作*/
}
错误: document.getElementById("hmMenuTop").contains is not a function
源文件:http://localhost:315/pfile/pub/jsmenu.js?r=AE44A6B4D8653D8
行:31
解决OnmouseOut违背逻辑的办法
http://www.enet.com.cn/article/2007/1031/A20071031888879.shtml
如何解决javascript中Onmouseout的问题
http://wuchangshengp27.blog.163.com/blog/static/6054376120096165107552/
============================= n
解决js中OnmouseOut事件冒泡的问题
http://hi.baidu.com/liangwenfa/blog/item/a6ddeeddc5dcd3e777c638d9.html
到此为止所有要解决的问题都得到了解决,当触发OnmouseOut事件时我们针对不同的浏览器先获取鼠标到达的元素,然后通过判断该元素是否在信息栏(div)内,如果元素是子元素,那么不执行OnmouseOut事件,反之则执行事件,隐藏信息栏,完成后的代码如下:
function hideMsgBox(theEvent){ //theEvent用来传入事件,Firefox的方式
if (theEvent){
var browser=navigator.userAgent; //取得浏览器属性
if (browser.indexOf("Firefox")>0){ //如果是Firefox
if (document.getElementById(''MsgBox'').contains(theEvent.relatedTarget)) { //如果是子元素
return; //结束函式
}
}
if (browser.indexOf("MSIE")>0){ //如果是IE
if (document.getElementById(''MsgBox'').contains(event.toElement)) { //如果是子元素
return; //结束函式
}
}
}
/*要执行的操作*/
}
在信息栏(Div)上设置OnmouseOut=hideMsgBox(event)来调用,圆满解决冒泡问题。
事实上通过设置
window.event.cancelBubble = true (IE) event.stopPropagation() event.preventDefault() (Firefox)
也可以解决问题,但是需要遍历所有子元素,影响效率,所以还是在触发OnmouseOut事件时再进行上述判断分别处理比较合适。
解决OnmouseOut违背逻辑的办法
http://www.enet.com.cn/article/2007/1031/A20071031888879.shtml
鼠标移出这个层的时候,就触发OnmouseOut事件,将层隐藏掉。
但是,如果你的鼠标接触到文字的时候,由于你接触到了A标记,而A标记在div1上边,所以就认为鼠标已经出了div1的范围了,就执行OnmouseOut了,这个实际上并不是我们的本意。
所以只能修改了一下HideDiv()方法,使其符合我们的要求
function HideDiv(pName){
var obj = event.toElement;
while( obj!=null && obj.id!=pName ){
obj = obj.parentElement;
}
if( obj==null ){ document.all[''div1''].style.display = ''none''; }
}大概意思是,当触发OnmouseOut事件时,先获取鼠标当前所指向的元素(对象),
然后用递归方法,一层一层的往外找它的父元素,判断有没有叫div1的。
如果一直到页面最外一层还找不到的话,那就把层隐藏了,
如果找到的话,说明是div1的子元素,就不做任何事。
如何解决javascript中Onmouseout的问题
http://wuchangshengp27.blog.163.com/blog/static/6054376120096165107552/