Муседаун. Распространение на мероприятии братьев и сестер.
-
26-10-2019 - |
Вопрос
У меня есть 2 брата-брата с «Абсолютом положения», которые оба обрабатывают событие Mousedown. Как я могу запустить обработчик «div 1», когда я нажимаю на прозрачную область «Div 2» (на картинке.)
Решение
Если перекрывающиеся элементы динамичны, я не верю, что это возможно выполнить, используя регулярные пузырьки событий, поскольку эти два рассматривающихся элемента являются «братьями и сестрами».
У меня была та же проблема, и я смог решить ее с большим количеством хиттового поставщика, где я проверяю, находится ли положение мыши пользователя в той же области.
function _isMouseOverMe(obj){
var t = obj.offset().top;
var o = obj.offset().left;
var w = obj.width();
var h = obj.height();
if (e.pageX >= o+1 && e.pageX <= o+w){
if (e.pageY >= t+1 && e.pageY <= t+h){
return true;
}
}
return false
}
Другие советы
Вы захотите использовать 3 обработчика событий, один для Div1, один для Div2 и один для ContentArea. Справочник ContentArea должен прекратить распространение, чтобы обработчик Div2 не был вызван. Обработчик Div2 должен вызвать обработчик Div1:
function div1Click (e)
{
// do something
}
function div2Click (e)
{
div1Click.call(div1, e);
}
function contentAreaClick (e)
{
e = e || window.event;
if (e.stopPropagation) e.stopPropagation();
e.cancelBubble = true;
// do something
}
div1.onclick = div1Click;
div2.onclick = div2Click;
contentArea.onclick = contentAreaClick;