<body onclick="alert('This\'s BODY!')">
<input type=button value="event.cancelBubble=true 阻止事件冒泡" onclick="alert('This\'s BUTTON!'); event.cancelBubble=true;">
<br><input type=button value="没有阻止事件冒泡, 全有两次 alert" onclick="alert('This\'s BUTTON!');">

解决方案 »

  1.   

    斑竹, 多谢了. 但是我找不到addEventListener()的例子, 能给一个吗?
      

  2.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=2582796
    这个是什么呢?
      

  3.   

    addEventListener() 事件处理程序的注册. 2级DOM事件模型.
    可能听起来点怪,通俗点就是加入事件.
    IE有自己定义的事件模型.  attachEvent 相当于 addEventListener
    来自
    JavaScript: The Definitive Guide <script>
    function beginDrag(elementToDrag,event)  { //计算元素原左上角与鼠标的距离
    //moveHandler要这值 var delatX=event.clientX-parseInt(elementToDrag.style.left);
    var delatY=event.clientY-parseInt(elementToDrag.style.top); //注册响应mousemove和mousedown事件后的mouseup事件的处理程序 if(document.addEventListener) {  //2级DOM事件模型
    //注册捕捉事件处理程序。
    document.addEventListener("mousemove",moveHandler,true);
    document.addEventListener("mouseup",upHandler,true);
    }
    else if(document.attachEvent) { //IE5+ 的事件模型
    //在IE事件模型中,我们不能捕捉事件,所以只有当事件起泡到这些处理程序时,
    //它们才被触发. 假设不存在干涉元素, 处理了事件后它们就停止传播
    document.attachEvent("onmousemove",moveHandler);
    document.attachEvent("onmouseup",upHandler);
    }
    else { //IE4事件模型
    //IE4我们不能使用attachEvent方法,所以存储了以前赋予的处理
    //程序后,直接赋予新的事件处理程序,这样可以恢复旧的处理程序.
    //注意,这样依赖于事件起泡.
    var oldmovehandler=document.onmousemove;
    var olduphandler=document.onmouseup;
    document.onmousemove=moveHandler;
    document.onmouseup=upHandler;
    } //我们处理了该事件,不要再让其他元素看见.
    if(event.stopPropagation) event.stopPropagation(); //2 级DOM
    else event.cancelBubble=true; //IE

    //下面禁止执行默认动作
    if(event.preventDefault) event.preventDefault();  //2级DOM
    else event.returnValue=false; //IE /*  这是元素被拖动时捕捉mousemove事件的处理程序.
     *  它负责移动元素
     */

    function moveHandler(e)  {
    if(!e) e=window.event; //IE事件模型;
    //把元素移动到鼠标当前的位置,根据初始鼠标点击的偏移量进行调整
    elementToDrag.style.left=(e.clientX-delatX)+"px";
    elementToDrag.style.top=(e.clientY-delatY)+"px";
    //不要再让其他元素看到该事件.
    if(e.stopPropagation) e.stopPropagation();  //2级DOM
    else e.cancelBubble=true; //IE
    } /*  这是捕捉拖移结束最后发生的mouseup事件的处理程序.
     */
    function upHandler(e) {
    if(!e) e=window.event; //IE事件模型.
    //注销捕捉事件程序.
    if(document.removeEventListener) { //DOM事件模型
    document.removeEventListener("mouseup",upHandler,true);
    document.removeEventListener("mousemove",moveHandler,true);
    }
    else if(document.detachEvent) { //IE5+ 事件模型
    document.detachEvent("onmouseup",upHandler);
    document.detachEvent("onmousemove",moveHandler);
    }
    else  { //IE事件模型
    document.onmouseup=olduphandler;
    document.onousemove=oldmovehandler;
    }
    //不要再让事件进一步传播.
    if(e.stopPropagation) e.stopPropagation();  //2级DOM
    else e.cancelBubble=true; //IE
              } }</script>
    <div style="position:absolute; left:100px;top:100px;
    backgroud-color:white;border:solid back;">
    <div style="backgroud-color:gray;border-bottom:dotted black;
    padding:3px;font-family:sans-serif;font-weight:bold;"
    onmousedown="beginDrag(this.parentNode,event);">
    Drag Me
    </div>
    <p>This is a test. Testing....</p>
    </div>