2012-10-01 63 views
0

如果我运行下面的代码,我得到,因为预期,1,因为a元素是在div元素内。一个元素点击和文档点击层次结构

HTML:

<div class=".holder"> 
    <a href="#" class=".link">a</a> 
</div> 

的jQuery:

$(document).click(function (e) { 
    alert($(e.target).closest(".holder").length); 
}); 

现在,一个元素中需要重新填充的div元素,包括一个元素本身,所以:

$(".link").on("click", function (e) { 
    e.preventDefault(); 
    $(".holder").html("some html"); 
}); 

问题是:因为文档点击发生在a元素点击(有意义,层次结构)之后,如果我点击ae lement,我得到0而不是1,因为一个父元素不再存在,而a元素本身只存在于内存中。

有没有办法解决这个问题,而不检查一个元素点击自己?

+0

究竟是什么你想实现什么?你只需要$(e.target).closest(“。holder”).length'来提醒1? –

+0

究竟是什么问题? –

回答

1

你可以推迟更换HTML:

$(document).click(function (e) { 
    alert($(e.target).closest(".holder").length); 
    if($('.holder').data('executeMe')) 
    $('.holder').data('executeMe')(); 
}); 

$(".link").on("click", function (e) { 
    e.preventDefault(); 
    $('.holder').data('executeMe', function() { 
     $(".holder").html("some html"); 
    }); 
}); 

2

你可以试试这个方法

$(document).click(function (e) { 
    if(e.target.className === 'link'){ 
     e.preventDefault(); 
     alert($(e.target).closest(".holder").length); 
     $(".holder").html("some html"); 
    } 
}); 

可以为文档创建点击事件,并检查当前有哪些目标是..如果它的链接,然后写出代码来处理你想要的东西..

也删除点。在你的类名类= “链接”

CHECK DEMO