2013-12-11 36 views
1

如何判断一个元素是否被jQuery点击?确定一个元素是否被点击?

喜欢的东西$('.ele').is(':clicked');

我坚持用jQuery 1.7.2,而我所要做的是迫使一些调式元素的结束,在文档中的任意位置单击,一个已经打开的时候。

所以我有:

$('body').on('click', function() { 
    if ($('.calc-info').is(':visible') && !$('.mi').is(':clicked')) { 
     $('.calc-info').fadeOut('fast'); 
    } 
}); 

但它抛出一个错误,因为没有:clicked表达

  • .calc-info是模态
  • .mi是按钮点击打开所述模式
+0

你的意思是直接点击?如果它的后代被点击了,该怎么办?这应该算什么? –

+0

'.mi'没有后代,这是一个图像 – Kevin

回答

2

做它周围的其他方法,检查是否点击的元素(event.target)选择

$('body').on('click', function (event) { 
    if ($(event.target).is('.ele')) { 
     // do stuff 
    } 
}); 

符合你的情况我会用

$('body').on('click', function (event) { 
    if ($('.calc-info').is(':visible') && 
     !($(event.target).closest('.mi').length) 
     ) { 
      $('.calc-info').fadeOut('fast'); 
    } 
}); 
+0

'$(event.target).is('。ele')'完美运作。 – Kevin

+0

@ o7thWebDesign它会工作,但如果你有一些其他元素.ele。这是行不通的。所以你也必须检查祖先节点。 –

+0

作为我的评论下的问题状态...“'.mi'(这是'.ele')没有后代,它是一个图像” – Kevin

1

只是去检查点击的element是否具有要排除的class。它只是一种short circuit的实现。如果用户直接点击目标元素,以下代码将阻止不必要的dom traversal

试试这个,

$('body').on('click', function (e) { 
    if ($('.calc-info').is(':visible') 
    && !$(e.target).hasClass('mi') 
    && !$(e.target).parents('.mi').length) { 

     $('.calc-info').fadeOut('fast'); 

    } 
}); 
+1

@Downvoter。你的话目前会非常有用。谢谢! –

+2

是不是我,但'e'是事件,它不能有一个类 – adeneo

+0

@ adeneo谢谢。其实这是一个错字。我只是纠正它。 –

0

尝试这样的事情。

$('mi').on('click', function() { 
$('mi').attr('rel',"clicked"); 
}); 
$('body').on('click', function() { 
if ($('.calc-info').is(':visible') && !$('.mi').attr('rel')=='clicked') { 
    $('.calc-info').fadeOut('fast'); 
} 
});` 
相关问题