确定是否单击了某个元素?

时间:2013-12-11 16:53:06

标签: javascript jquery modal-dialog

如何确定是否使用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是点击打开所述模态的按钮

3 个答案:

答案 0 :(得分: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');
    }
});

答案 1 :(得分: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');

    }
});

答案 2 :(得分: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');
}
});`