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事件触发。所以现在,当我去掉我的颜色时,我只是用白色填充我的路径。我的错误是认为我所有的道路都充满了人:一开始没有,但那不是真的对不起。