Во-первых, используйте делегирование события через .on()
.Гораздо чище и проще в обслуживании, чем привязка событий к нескольким элементам.При делегировании мы связываем событие один раз (с элементом верхнего уровня, например, body
), а затем, когда оно выполняется, выясняем, хотим ли мы, чтобы оно продолжалось для целевого элемента, который вызвал событие.
Мыэто можно сделать, передав селектор в качестве второго параметра в on()
, но в вашем случае, поскольку логика относительно того, должно ли событие выполняться, нетривиальна, может быть проще проверить это в обратном вызове.
Ключом является исключение #private_chat_menu
И его потомков / потомков.
$('body').on('mouseup', '*', function(e) {
if ($(this).closest('#private_chat_menu').length) return;
//safe to continue...
});
closest()
говорит: "текущий или любые родительские / родительские элементы соответствуют переданному селектору?"Если да, мы знаем, что не должны позволять запускать событие.