【问题标题】:JQuery Event on SVG not firingSVG上的JQuery事件未触发
【发布时间】:2015-12-17 22:58:02
【问题描述】:

我对事件有疑问。我有一个 div,里面有一个 svg 区域。在那个区域我想在一些组中放置一些节点。当我单击空白区域时,我需要一种不同的行为,而当我单击 svg 矩形时,我需要一种不同的行为。

问题是,只有我的 div contextmenu 事件正在触发。我的 JS:

$(function() {

$('#mainBoard').on("click", function (ev) {
    ev.preventDefault();
    $('body').append("DivEventTiggered ");
    return false;
});

$("svg").find("g.node").find("rect").on("click", function (ev) {
    ev.preventDefault();
    $('body').append("SVGEventTriggered");
    return false;
})

$('#add-svg').click(function (ev) {
        d3.select("#SVGcanvas")
        .append("g")
        .attr("id", "id0")
        .attr("class", "node")
        .append("rect")
        .attr("x", 0)
        .attr("y", 0)
        .attr("width", 40)
        .attr("height", 40)
        .style("fill", "purple")
        .style("opacity", "0.1")
        .style("border", "1px black solid");
    return false;
})
})

CSS:

#mainBoard {
padding: 0;
margin: auto;
display: block;
width: 200px;
height: 200px;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
border: 1px solid black;
}

#menu {
height: 37px;
}

还有我的 HTML sn-p

<div id="mainBoard">
<svg id="SVGcanvas" style="height:inherit; width:inherit; display:block;"></svg>
<div id="menu">
    <button id="add-svg" class="btn btn-success" style="margin-right: 10px;">Add SVG</button>
</div>

这里可以看到只触发了Div Event: JSFiddle

【问题讨论】:

    标签: javascript jquery html events svg


    【解决方案1】:

    问题是您在 svg 矩形存在之前将点击事件绑定到它们(通过单击添加 svg 按钮)。

    最简单的解决方案是:

    $('#add-svg').click(function (ev) {
            d3.select("#SVGcanvas")
            .append("g")
            .attr("id", "id0")
            .attr("class", "node")
            .append("rect")
            .attr("x", 0)
            .attr("y", 0)
            .attr("width", 40)
            .attr("height", 40)
            .style("fill", "purple")
            .style("opacity", "0.1")
            .style("border", "1px black solid");
    
             // now the g node exists
             $("svg").find("g.node").find("rect").on("click", function (ev) {
                ev.preventDefault();
                $('body').append("SVGEventTriggered");
                return false;
            })
        return false;
    })
    

    【讨论】:

    • 酷!这行得通,我不敢相信我没有想到这一点,谢谢!
    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多