html5-JS关于mouseout事件在父亲元素与子元素之间的小问题,求解了 ,谢谢

问题描述

JS关于mouseout事件在父亲元素与子元素之间的小问题,求解了 ,谢谢

我又来了,想把问题搞明白不想不求甚解

 <!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
<style>
    *{margin:0; padding:0; list-style-type:none;}
    nav{height:40px; width:1000px; margin:auto; background:#ccc; position:relative; top:0; left:0;}
    #A li{width:40px; height:40px; float:left; padding-left:20px;}
    #B li{width:60px; height:40px; position:absolute; top:40px; left:0; background:green; display:none;}
</style>
</head>
<body>
<nav onmouseout="xi()">
   <ul id="A">
       <li onmouseover="show(0)">首页1</li>
       <li onmouseover="show(1)">男装2</li>
       <li onmouseover="show(2)">女装3</li>
       <li onmouseover="show(3)">热卖4</li>
   </ul>
    <ul id="B" onmouseout="show2()" onmouseover="show3()">
        <li>商品1</li>
        <li>商品2</li>
        <li>商品3</li>
        <li>商品4</li>
    </ul>
</nav>
</body>
<script>
    var a=document.getElementById('A').getElementsByTagName('li');
    var b=document.getElementById('B').getElementsByTagName('li');
    function show(m){
        b[m].style.display='block';
        b[m].style.left=a[m].offsetLeft+'px';
    }
    function xi(){
        for(var i=0;i< b.length;i++){
            b[i].style.display='none';
        }
    }
        window.setTimeout('xi()',1000);
    function show2(){
        for(var i=0;i< b.length;i++){
            b[i].style.display='none';
        }
    }
</script>
</html>

我认为鼠标离开B, B才会消失, 因为B是nav里的元素啊
但是事实是鼠标一离开nav B就消失了
, 我看别人那么写的都可以啊 我的为什么不行了.... - -!好忧桑
(我也知道nav的height是40px),

昨晚一位好心的网友给了我这个答案让我参考:
onmouseout事件过于敏感,所以通过setTimeout事件来延迟事件的执行就好了.

 someElement.onmouseout = function () {
        // ch在函数顶端已经var过了
        ch = setTimeout("something", 100);

    };

(if (ch) {
clearTimeout(ch);
}
至于这个判断要放在什么地方,具体情况具体分析,不过大部分都是放在onmouseover事件的顶部
)
我觉得思路很棒啊,但是不知道怎么用进去
someElement是什么意思啊?

谢谢大家了

解决不了问题很苦恼啊 = =!

解决方案



    *{margin:0; padding:0; list-style-type:none;}
    nav{height:40px; width:1000px; margin:auto; background:#ccc; position:relative; top:0; left:0;}
    #A li{width:40px; height:40px; float:left; padding-left:20px;}
    #B li{width:60px; height:40px; position:absolute; top:40px; left:0; background:green; display:none;}
  • 首页1
  • 男装2
  • 女装3
  • 热卖4
  • 商品1
  • 商品2
  • 商品3
  • 商品4
var aALi=document.getElementById('A').getElementsByTagName('li'); var aBLi=document.getElementById('B').getElementsByTagName('li'); var timer = null; function fnShowNav(m){ fnHideShop(); aBLi[m].style.display='block'; aBLi[m].style.left=aALi[m].offsetLeft+'px'; } function fnHideShop(){ for(var i=0;i< aBLi.length;i++){ aBLi[i].style.display='none'; } } function fnOut(){ timer = setTimeout(fnHideShop,300); } function fnOver(){ clearTimeout(timer); }

解决方案二:

http://www.cnblogs.com/zhrj000/archive/2012/10/11/2720353.html

解决方案三:

<!DOCTYPE html>

*{margin:0; padding:0; list-style-type:none;}
nav{height:40px; width:1000px; margin:auto; background:#ccc; position:relative; top:0; left:0;}
#A li{width:40px; height:40px; float:left; padding-left:20px;}
#B li{width:60px; height:40px; position:absolute; top:40px; left:0; background:green; display:none;}

  • 首页1
  • 男装2
  • 女装3
  • 热卖4

  • 商品1
  • 商品2
  • 商品3
  • 商品4

var aALi=document.getElementById('A').getElementsByTagName('li');
var aBLi=document.getElementById('B').getElementsByTagName('li');
var timer = null;

function fnShowNav(m){
fnHideShop();
aBLi[m].style.display='block';
aBLi[m].style.left=aALi[m].offsetLeft+'px';
}

function fnHideShop(){
for(var i=0;i< aBLi.length;i++){
aBLi[i].style.display='none';
}
}
function fnOut(){
timer = setTimeout(fnHideShop,300);
}
function fnOver(){
clearTimeout(timer);
}

下次写代码规范点,另外 不建议行间加事件

解决方案四:

看图片吧

解决方案五:

要么是事件区域选择问题出错了,要么就是mouseover和mouseout区别的问题

解决方案六:

js 中的元素和事件介绍
js 捕捉元素事件
JS给元素添加事件

时间: 2024-12-23 03:55:26

html5-JS关于mouseout事件在父亲元素与子元素之间的小问题,求解了 ,谢谢的相关文章

js与jquery获取父元素,删除子元素的两种不同方法

 本篇文章主要是对js与jquery获取父元素,删除子元素的两种不同方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 var obj=document.getElementById("id");得到的是dom对象,对该对象进行操作的时候使用js方法   var obj=$("#id");得到的是jquery对象,对该对象进行操作的时候使用jquery方法   1.对于上面获得的对象进行遍历   (1).js方法  for(vat i=0;j<obj

jquery-ui-draggable-事件捕获对一个元素监听拖动事件并对这个元素的子元素监听点击事件

问题描述 事件捕获对一个元素监听拖动事件并对这个元素的子元素监听点击事件 在不支持事件冒泡的浏览器中.对一个元素监听拖动事件并对这个元素的子元素监听点击事件.这两个事件会冲突.只能执行拖动事件.这种问题怎么解决? 解决方案 Preference元素和监听事件 解决方案二: 说明你没点击到子元素,一般是从子元素冒泡,不支持冒泡不会触发父元素的拖动事件 不过有哪种浏览器不支持冒泡?还没碰到过.. 解决方案三: 浏览器都支持冒泡啊,如果你只用捕获,那么肯定是先监听到父元素的事件,再是子元素,但问题是你

js判断一个元素是否为另一个元素的子元素的代码_javascript技巧

当然方法有很多,不过个人认为通过判断一个元素是否为另一个元素的子元素是最简单的实现方式之一. 废话少说直接上方法: 复制代码 代码如下: function isParent (obj,parentObj){ while (obj != undefined && obj != null && obj.tagName.toUpperCase() != 'BODY'){ if (obj == parentObj){ return true; } obj = obj.parentN

javascript-用NVelocity+html中的#foreach自动生成的元素如何获取它的父元素和子元素?

问题描述 用NVelocity+html中的#foreach自动生成的元素如何获取它的父元素和子元素? 比如form中的表格中用#foreach自动生成行显示数据项,行的最后有修改/删除按钮,如何获取自动生成中的元素的值并传到服务器/在js中进行操作?如果无法实现,有什么替代方法? 解决方案 子元素过滤选择器(获取父元素中指定的某个子元素) 解决方案二: js的按钮事件传递this对象,this指向按钮这个dom,然后通过dom关系进行获取相关元素 如 <div>.....其他内....<

jquery查找父元素、子元素

 对使用js或者jquery查找父元素.子元素比较混淆的朋友可以参考下本文,因为是个人总结,用起来会比较方便 使用js或者jquery查找父元素.子元素经常遇到.可是用起来总容易混淆,这里统一总结了一下,以后用起来相信会方便好多    这里jquery向上查找父元素 用到的方法:closest() parents() parent()    向下查找子元素 用到的方法:find() children()    js用的是 children[] 属性    html代码   代码如下: <!DOC

jquery查找父元素、子元素(个人经验总结)_jquery

使用js或者jquery查找父元素.子元素经常遇到.可是用起来总容易混淆,这里统一总结了一下,以后用起来相信会方便好多 这里jquery向上查找父元素 用到的方法:closest() parents() parent() 向下查找子元素 用到的方法:find() children() js用的是 children[] 属性 html代码 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)_jquery

上个月研究学习了<js判断一个元素是否为另一个元素的子元素>,感觉还挺好用,但是在jQuery应用中还是有很多缺陷,比如多个元素的时候写起来就不是很方便.所以写了比较简单的jQuery判断一个元素是否为另一个元素的子元素(或者其本身)的两个扩展: 复制代码 代码如下: //判断:当前元素是否是被筛选元素的子元素 jQuery.fn.isChildOf = function(b){ return (this.parents(b).length > 0); }; //判断:当前元素是否是被筛

jquery判断元素的子元素是否存在的示例代码

 本篇文章主要是对jquery判断元素的子元素是否存在的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 jquery判断子元素是否存在      一.判断子元素是否存在    //一级子元素 if($("#specialId>img").length==0)      if ($( "#specialId:has(img)" ).length==0)           {       //-----没有img子标记-----      }

IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素_javascript技巧

如下 1,两个div,d1中包含d2 2,d1,d2都设置了absolute或relative 3,隐藏d1 4,隐藏子元素d2 5,显示d1 这时IE6/7 and IE8/9/10(IE7模式)中会发现,子元素d2也能显示出了(别忘了,d2被display:none 了哦).但IE8/9/10/Firefox5/Safari4/Chrome12中子元素d2仍然是被隐藏的. 重现代码 复制代码 代码如下: <!DOCTYPE HTML> <HTML> <HEAD> &