为了账号安全,请及时绑定邮箱和手机立即绑定

为div添加事件,不会产生事件冒泡而是弹出两个相同showmes,这是为什么呢?对着视频老师讲解敲了好几回都是这样?拜托哪位大神帮忙解下疑惑,谢谢!

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>

</head>
<body>
  <div id="box">
    <input type="button" value="按钮3" id="btn3" />
    <a href="联系.html" id="go">跳转</a>
  </div>
<script type="text/javascript">
var eventUtil={
    addHandler:function(element,type,handler){
        if(element.addEventListener){
            element.addEventListener(type,showmes,false);
        }else if(element.attachEvent){
            element.attachEvent('on'+type,showmes);
        }else{
            element['on'+type]=showmes;
        }
    },
     removeHandler:function(element,type,handler){
        if(element.removeEventListener){
            element.removeEventListener(type,showmes,false);
        }else if(element.detachEvent){
            element.detachEvent('on'+type,showmes);
        }else{
            element['on'+type]=null;
        }
    },
}

function showmes(){
    alert('hello world');
}

function showbox(){
    alert('这是放按钮的BOX');
}

function stopgoto(){
    alert('');
}

var btn3=document.getElementById('btn3');
var box=document.getElementById('box');
var go=document.getElementById('go');

eventUtil.addHandler(btn3,'click',showmes);
eventUtil.addHandler(box,'click',showbox);


</script>
</body>
</html>

正在回答

3 回答

错误:你addHandler里面所有的handler都用的showmes,所以不管绑定什么函数,都是showme。

解决办法:把addHandler中所有showmes改为handler。removeHandler中亦是如此。

0 回复 有任何疑惑可以回复我~

<!DOCTYPE HTML>
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <title>无标题文档</title>
</head>
<body>
<div id="box">
   <input type="button" value="按钮3" id="btn3" />
   <a href="联系.html" id="go">跳转</a>
</div>
<script type="text/javascript">
   var eventUtil={
       addHandler:function(element,type,handler){
           if(element.addEventListener){
               element.addEventListener(type,handler,false);
           }else if(element.attachEvent){
               element.attachEvent('on'+type,handler);
           }else{
               element['on'+type]=handler;
           }
       },
       removeHandler:function(element,type,handler){
           if(element.removeEventListener){
               element.removeEventListener(type,handler,false);
           }else if(element.detachEvent){
               element.detachEvent('on'+type,handler);
           }else{
               element['on'+type]=null;
           }
       },
   }

   function showmes(){
       alert('hello world');
   }

   function showbox(){
       alert('这是放按钮的BOX');
   }

   function stopgoto(event){
      event.stopPropagation();
       event.preventDefault();
   }

   var btn3=document.getElementById('btn3');
   var box=document.getElementById('box');
   var go=document.getElementById('go');

   eventUtil.addHandler(btn3,'click',showmes);
   eventUtil.addHandler(box,'click',showbox);
   eventUtil.addHandler(go,'click',stopgoto);


</script>
</body>
</html>

试一下吧!

0 回复 有任何疑惑可以回复我~
var eventUtil={
    addHandler:function(element,type,handler){  //这里参数是handler
        if(element.addEventListener){
            element.addEventListener(type,showmes,false);  //错误,将showmes改成handler
        }else if(element.attachEvent){
            element.attachEvent('on'+type,showmes);  //错误
        }else{
            element['on'+type]=showmes;  //错误
        }
    }


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
DOM事件探秘
  • 参与学习       99545    人
  • 解答问题       1197    个

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

进入课程

为div添加事件,不会产生事件冒泡而是弹出两个相同showmes,这是为什么呢?对着视频老师讲解敲了好几回都是这样?拜托哪位大神帮忙解下疑惑,谢谢!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信