码迷,mamicode.com
首页 > 其他好文 > 详细

currentTarget在IE下的解决方案

时间:2015-05-10 17:03:07      阅读:1505      评论:0      收藏:0      [点我收藏+]

标签:

什么是currentTarget?

<a id="ad1" data-at="1" href="">
    <span id="span1">demo</span>
</a>
<script>
    var ad1 = document.getElementById("ad1");
    ad1.onclick = function(e){
        var e = e || window.event;
        var target = e.target || e.srcElement;
        alert(target.id) //"span1"
        alert(e.currentTarget.id) //"ad1"
    }
 </script>    

如上面的代码所示,当我给id为ad1绑定click事件时,触发click事件后,在A的click事件处理器中,target为a元素里面的span标签,而非A元素,而currentTarget才是A元素。

《javascript高级程序设计》书中的解释为:

  • target:事件的目标
  • currentTarget:事件处理程序当前正在处理事件的那个元素

那么问题来了,我想在点击的时候,获取到A元素的data-at属性,该怎么办呢?currentTarget在IE9之前的IE版本都不支持

 

解决方案有两种:

1.向上寻找父元素

<script>
    var ad1 = document.getElementById("ad1");
    ad1.onclick = function(e){
    var e = e || window.event;
    var target = e.target || e.srcElement;
    if(target.tagName.toLowerCase != "a"){
        target = target.parentNode
        }
    alert(target.id) // ad1
    var at = 0;
    if(target.dataset){
        at = target.dataset.at
    }else{
        at = target.getAttribute("data-at");
    }
    }
</script>    

 

2.修改this指针,并在IE下将ad1赋值给event.currentTarget

<script>
    var ad1 = document.getElementById("ad1");
    var addListener = (function() {
        if(document.attachEvent) {
            return function(element, event, handler) {
                element.attachEvent(‘on‘ + event, function() {
                    var event = window.event;
                    event.currentTarget = element;
                    event.target = event.srcElement;
                    handler.call(element, event);
                });
            };
         }
         else {
            return function(element, event, handler) {
                element.addEventListener(event, handler, false);
            };
         }
    }());
    
  addListener(ad1,"click",function(e){
    var currentTarget = e.currentTarget;
    var at =0;
    if(currentTarget.dataset){
        at = currentTarget.dataset.at
    }else{
        at = currentTarget.getAttribute("data-at");
    }
    alert(at)
  })
</script>

 

currentTarget在IE下的解决方案

标签:

原文地址:http://www.cnblogs.com/fiona-xiaofan/p/4492068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!