8

画像

「絶対位置」を持つ2つの兄弟ノードがあり、どちらもマウスダウンイベントを処理します。「div 2」の透明な領域をクリックしているときに「div 1」のハンドラーをトリガーするにはどうすればよいですか (写真上)。

4

3 に答える 3

4

重なり合う要素が動的である場合、問題の 2 つの重なり合う要素は「兄弟」であるため、通常のイベント バブリングを使用してこれを達成することはできないと思います。

私は同じ問題を抱えていましたが、ユーザーのマウスの位置が同じ領域内にあるかどうかをテストする、より多くの hitTest シーンで解決することができました。

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
}
于 2012-03-01T02:49:09.517 に答える
0

div1 用、div2 用、および contentArea 用の 3 つのイベント ハンドラーを使用する必要があります。div2 ハンドラーが呼び出されないように、contentArea ハンドラーは伝搬を停止する必要があります。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;
于 2011-10-18T17:34:29.310 に答える