2012-09-25 106 views
3

我试过使用stopPropagation(),但没有运气。
我有这样的结构:jQuery DIV click()接管DIV.IMG click()

<div class="logos"> 
</div> 

我有一个点击绑定到标识,即追加IMG元素中它结束了,如:

<div class="logos"> 
    <img width="100" height="80" src="/js/fileupload/uploads/Penguins.jpg"> 
    <img width="100" height="80" src="/js/fileupload/uploads/Hydrangeas.jpg"> 
</div> 

我要绑定一个click事件的图像,所以当他们点击时,他们可以从“标识”div中删除,我使用.live()来跟踪这些点击。
结果是,当我点击图片时,“徽标”单击事件和img点击事件都被触发。

$('.logos img').live('click', function(e){ 
     var answer = confirm ("Delete image?") 
     if (answer){ 
      $(this).remove(); 
     } 
    }); 
    $('.logos').click(function(e){ 
      e.stopPropagation(); 
      $('.qq-upload-button input').trigger('click'); //File uploader that uploads images and creates the img elements. 
    }); 

由于

+0

你尝试过将e.stopPropagation();在img函数中? –

+0

是的,我试了两个函数,并与e.stopPropagation()和e.stopImmediatePropagation() – doterobcn

回答

4

你可以做这样的事情。如果你正在使用> jQuery 1.4,你应该使用on而不是live。检查目标,如果它是一个图像,然后将其删除。否则,保持它。

http://jsfiddle.net/AprTx/

$('.logos').on('click', function(e) { 
    e.stopPropagation(); 

    if ($(e.target).is('img')) { 
     $(e.target).remove(); 
    } 
    else { 
     $(this).append($('<img src="http://placehold.it/300x300" />')); 
    } 
});​ 
+0

我喜欢这个,试试吧 – doterobcn

+0

作品喜欢魅力,谢谢@mrtsherman – doterobcn

4

在jQuery 1.7中,。对()方法提供用于附接的事件处理程序所需的所有功能。

这是从DOCS,但也可以将您的图像e.stopPropagation()在点击传播给父母之前! :)

jsBin demo

$('.logos img').on('click', function(e){ 
     e.stopPropagation(); 
     var answer = confirm("Delete image?"); 
     if (answer){ 
      $(this).remove(); 
     } 
}); 

$('.logos').click(function(){ 
    $('.qq-upload-button input').click(); 
}); 
+1

他是如此亲密 – mrtsherman

+0

现在试试吧! – doterobcn

+0

@doterobcn编辑我的答案,我错过了一个小细节。如果我理解得很好,如果有人删除了想要上传(拨打)新图片的图片? –