2013-12-11 3 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

проверки Just имеет ли щелчок elementclass, который должен быть исключен. и его просто вид 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'); 
} 
});` 
Смежные вопросы