<div id="div1"  style="height:50px;width:120px;background-color:Green;" onmousedown="alert('div1')">
            <div id="div2" style="height:25px;width:110px;background-color:red;z-index:2" onclick="alert('div2')"></div>        
        </div>   我怎样做才能得到我正确的事件
       我好头疼了 ,谢谢高手指点迷津~!!

解决方案 »

  1.   


    我想要我点击子层执行子层的onclick事件,点父层执行父层的onmousedown事件 但是以上代码不管你点那个都是执行了父层的onmousedown事件?这是怎么回事的??
      

  2.   

    onmousedown是先于onclick执行的。所以首先你应该做的是把onmousedown => onclick
    然后在子的onclick里去取消冒泡
      

  3.   

        <div><div id="div1"  style="height:50px;width:120px;background-color:Green;" onclick="alert('div1')">
                <div id="div2" style="height:25px;width:110px;background-color:red;z-index:2" onclick="doSomething(event)"></div>        
            </div>
        </div>    <script>
            function doSomething(e) {
                alert('div2');
                e.stopPropagation()
            }
        </script>
      

  4.   


    但是怎么解决呢,还有IE的冒泡不是从最顶层的事件元素向document散发出去的吗 那如果是这样不是先弹出“div2”  然后到 “div1”吗?为什么只弹了"div1"?
      

  5.   


       但是父层的onmousedown事件是必须要的  那该怎么做呢?是不是做不到了?
      

  6.   

    矛盾的需求
    click事件在鼠标放开后才产生
    mouseup事件在鼠标按下去的时候就已经产生了
    你希望在鼠标按下去的时候  执行父DIV的事件
    在鼠标放开的时候 执行子DIV的事件
    且 子事件要在父事件之前触发
    。。矛盾啊
    矛盾即不合理 所以你要改变你的业务逻辑
      

  7.   


           不是这样说 好多事件处理都有这样的需求(比如js剪载图片,嵌套层的拖动,嵌套层的缩放...)  现在我就有两个解决方案:  
              1:在子层中添加同样的onmousedown事件用于阻止子层事件onclick之前发生的onmousedown事件,即阻止onmousedown的冒泡,但是问题又来了,这种做法只有IE才正确,如火狐的事件流和IE是相反的,并且如果有多个子层那就麻烦了。
                2:是在父层的onmousedown做一个判断做一个暗号.当onmousedown事件流到达父层是不是本意要执行自身了业务代码。
          ----不知道你们有没有更好的办法
      

  8.   

    通过(arguments[0].target || event.srcElement).id,直接得到冒泡传来的ID,过滤你想要的那个ID后执行事件
      

  9.   

    可以看做onclick是由onmousedown和onmouseup合成的, 只有在onmousedown和onmouseup事件都完成冒泡过程之后,才会捕捉到onclick事件,所以交元素的onmouseup事件会在子元素的onclick前发生。