如何将单击事件绑定到文档,以便仅在未单击任何对象时触发

时间:2010-12-20 23:59:38

标签: javascript jquery click

我想在点击DOM元素以外的其他内容时触发事件,并在单击图像时单独发生事件。

现在我有:

$( document ).click( function() { /*do whatev*/ } );

在另一个地方:

$( "img" ).click( function( e ) { 
  e.stopPropagation();
  /*do whatev*/
} );

它不起作用。这两件事都被解雇了。还有其他想法吗?

4 个答案:

答案 0 :(得分:2)

简洁明了:

jQuery(document).click(function(event) {
  if (jQuery(event.target).is('img'))
  {
    alert('img');
  }
  else
  {
    // Reject event
    return false;
  }
});

如果用户点击img元素'img'会收到警报,否则点击事件就会停止。

答案 1 :(得分:1)

类似的东西:

$('*').click(function(ev) {
    ev.stopPropagation();
    if ($(this).is('img')) alert('img');
    else if($(this).is('div')) alert('div');
    else alert('something else');
});

http://www.jsfiddle.net/U2Szn/

答案 2 :(得分:0)

这应该有用,但只有img是不够的。它可能是从img容器触发的。我认为你需要一个像$('p,div,img,a,input,textarea,span,ul,ol,dl,li,dd,dt,table,tr,td')这样的选择器以及你能想到的任何其他标签来实现它。这可能存在性能问题。

答案 3 :(得分:0)

如果您希望在点击html和/或body或点击img时触发某个事件,则可以使用以下内容: Live Example

$(document).click(function(e) {
  if($(e.target).is('html')){
    alert('this is the html element');
  }else if($(e.target).is('body')){
    alert('this is the body element');
  }
});
$("img").click(function(e) {
    e.stopPropagation();
    alert('img')
});​