2013-05-06 63 views
0

我有以下的div:如何在Internet Explorer 8和9中委托事件?

<div class="test0 clickable"> 
    <div class="test1 clickable"> 
     <div class="test2 clickable">Click me</div> 
    </div> 
</div> 

当我点击“测试2”我想该div test2的从DOM和之后的DIV test1的去除。它适用于除IE8和IE9以外的所有主流浏览器。

的JavaScript是:

$(".clickable").click(function(event){ 
    //if (some event condition) 
    $(this).remove(); 
}); 

我如何能保证点击事件从TEST2浮上TEST1,使得两个div的是基于“事件”的条件移除的对象?

+0

因此,在IE中'test1'不会被删除? – dfsq 2013-05-06 18:12:21

+0

可能是IE不遵循标准事件模型的另一种情况... – Bergi 2013-05-06 18:17:26

+0

请注意,它适用于IE9,但不适用于IE8。 http://jsfiddle.net/Ttn8g/4/(确保控制台已打开) – 2013-05-06 18:25:55

回答

0

使用stopPropagation

$(".clickable").click(function(event){ 
     event.stopPropagation(); 
     $(this).remove(); 
}); 
+0

这与他想要的相反吗? – Barmar 2013-05-06 18:14:02

+0

他想先删除孩子,然后给父母rt ..? – Sarath 2013-05-06 18:15:15

+0

这就是他写的:_guarantee ...两个div都被删除了_ – Barmar 2013-05-06 18:16:38

1

尝试删除明确家长,如果选择匹配:

$(".clickable").click(function(){ 
    $(this).remove(); 
    if ($(this).parent().hasClass('clickable')) $(this).parent().remove(); 
}); 
+0

或'$(this).parents(“。clickable”)。remove()'因为所有父母都是.clickable最终会冒泡到假设什么都不停它在路上。 – 2013-05-06 18:23:06

+0

我更新了我的帖子。除去div应基于某些事件条件,例如基于鼠标位置。所以我需要每个clickable都可以从click事件中接收事件对象。 – confile 2013-05-06 18:39:06

+0

鼠标位置是否从元素变为元素? – adeneo 2013-05-06 19:01:37

0

看起来像IE浏览器有一些问题,实施standardized event flow。但是,通过推迟删除节点,这应该很容易解决:

$(".clickable").click(function(event){ 
    var toremove = this; 
    if (/*some event condition*/) 
     setTimeout(function(){ 
      $(toremove).remove(); 
     }, 0); 
});