Як я можу запустити функцію, коли я клацну будь-де на моїй сторінці, крім одного div ( id=menu_content
)?
Як я можу запустити функцію, коли я клацну будь-де на моїй сторінці, крім одного div ( id=menu_content
)?
Відповіді:
Ви можете подати заявку click
на body
документ і скасувати click
обробку, якщо click
подія генерується div з ідентифікатором menu_content
, це прив'яже подію до одного елемента та збереже прив'язку click
кожного елемента, крімmenu_content
$('body').click(function(evt){
if(evt.target.id == "menu_content")
return;
//For descendants of menu_content being clicked, remove this check if you do not want to put constraint on descendants.
if($(evt.target).closest('#menu_content').length)
return;
//Do processing of click event here for every element except with id menu_content
});
closest
починається з поточного елемента, він обробляє натискання menu_content
, а також натискання на нащадків. Я думаю, що друге if
- це все, що вам потрібно.
Див. Документацію щодо jQuery Target Event . Використовуючи властивість target об’єкта події, ви можете виявити, звідки клацнув #menu_content
елемент у елементі, і, якщо так, достроково завершити обробник клацань. Вам доведеться використовувати .closest()
для обробки випадків, коли клацання виникло у нащадку #menu_content
.
$(document).click(function(e){
// Check if click was triggered on or within #menu_content
if( $(e.target).closest("#menu_content").length > 0 ) {
return false;
}
// Otherwise
// trigger your click function
});
спробуйте це
$('html').click(function() {
//your stuf
});
$('#menucontainer').click(function(event){
event.stopPropagation();
});
Ви також можете використовувати зовнішні події
Я знаю, що на це питання відповіли, і всі відповіді приємні. Але я хотів додати свої два центи до цього питання для людей, які мають подібну (але не зовсім однакову) проблему.
Більш загальним чином ми можемо зробити щось подібне:
$('body').click(function(evt){
if(!$(evt.target).is('#menu_content')) {
//event handling code
}
});
Таким чином ми можемо обробляти не тільки події, що запускаються будь-чим, крім елемента з ідентифікатором, menu_content
але також події, які запускаються будь-чим, крім будь-якого елемента, який ми можемо вибрати за допомогою селекторів CSS.
Наприклад, у наступному фрагменті коду я отримую події, що запускаються будь-яким елементом, крім усіх <li>
елементів, які є нащадками елемента div з ідентифікатором myNavbar
.
$('body').click(function(evt){
if(!$(evt.target).is('div#myNavbar li')) {
//event handling code
}
});
ось що я зробив. хотіла переконатися, що я можу натиснути будь-якого з дітей у моєму датчику, не закриваючи його.
$('html').click(function(e){
if (e.target.id == 'menu_content' || $(e.target).parents('#menu_content').length > 0) {
// clicked menu content or children
} else {
// didnt click menu content
}
});
мій фактичний код:
$('html').click(function(e){
if (e.target.id != 'datepicker'
&& $(e.target).parents('#datepicker').length == 0
&& !$(e.target).hasClass('datepicker')
) {
$('#datepicker').remove();
}
});