Javascript D3js以编程方式将fill设置为none会影响onClick事件

Javascript D3js以编程方式将fill设置为none会影响onClick事件,javascript,d3.js,svg,Javascript,D3.js,Svg,有人能给我解释一下以下方法在不同条件下操纵路径颜色的错误吗 <button ID="btnTopo" onclick="fillTopo()"> FillTopo</button> var isTopo; function fillTopo() { svgContainer.selectAll("path")

有人能给我解释一下以下方法在不同条件下操纵路径颜色的错误吗

    <button ID="btnTopo" onclick="fillTopo()"> FillTopo</button>

                var isTopo;
                function fillTopo() {

                            svgContainer.selectAll("path")
                                .filter(function (d) {
                                    if (d.properties.PE_Nr == 7000) { 
                                        return true;
                                    }
                                })
                                .attr("fill", isTopo ? "none" : "#FF6600");

                            svgContainer.selectAll("path")
                                .filter(function (d) {
                                    if (d.properties.PE_Nr == 7200) { 
                                        return true;
                                    }
                                })
                                .attr("fill", isTopo ? "none" : "#FFFF00");

                            svgContainer.selectAll("path")
                                .filter(function (d) {
                                    if (d.properties.PE_Nr == 6600) {
                                        return true;
                                    }
                                })
                                .attr("fill", isTopo ? "none" : "#F20000");

        .
        .
        .
isTopo = !isTopo;
        + 30
一开始,我所有的路径都有fill:none和一个onClickEvent,它会按我的预期触发

OnButton单击我执行fillTopo函数。在第一次单击时,一切正常,my path OnClick事件激发,但在第二次单击按钮时,它再次将填充更改为无 我的路径onClick事件停止触发

我做错了什么?

您需要调整,以便未填充的形状仍能对鼠标单击作出反应。听起来像

 pointer-events: visible;

可能就是您想要的。

您可以在fillTopo函数中记录isTopo的值,并查看第一次和连续单击时的值是否相同或不同。可能是isTopo值在代码中的某个地方被修改了。我确实在函数的开头添加了console.log,它为false或未定义,最后为true。在第二次单击时,首先为true,然后为false。看来一切都是对的。我注意到,如果我选择一个路径,它会变成fill:blue,然后当我在按钮上将fill属性更改为none时,单击fill:blue,在该路径上会触发onMouseClick事件。尝试在函数开始时从svg中删除所有现有路径,看看它是否有效。尝试此svgContainer.selectAllpath.remove;我的同事发现了问题,这是因为填充:无。当我点击边界线时,我的path onClick事件触发。所以现在,当我去掉我的颜色时,我只是用白色填充我的路径。我的错误是认为我所有的道路都充满了人:一开始没有,但那不是真的对不起。