MouseDown.распространение на братьев и сестер event.targets - PullRequest
5 голосов
/ 18 октября 2011

image

У меня есть 2 узла-брата с «абсолютным положением», которые оба обрабатывают событие mousedown. Как я могу вызвать обработчик «div 1», когда нажимаю на прозрачную область «div 2» (на рис.)

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Если перекрывающиеся элементы являются динамическими, я не верю, что это можно сделать с помощью регулярного всплывающего события, так как два рассматриваемых перекрывающихся элемента - это «братья и сестры».

У меня была та же проблема, и я смог ее решить с помощью более хитроумного сценария, где я проверял, находится ли позиция мыши пользователя в той же области.

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
}
0 голосов
/ 18 октября 2011

Вы захотите использовать 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;
...