如何完全禁用元素事件?

时间:2020-04-17 16:48:29

标签: javascript cytoscape.js

我正在使用复合模型和cytoscape-compound-拖放扩展,以便用户通过将一些节点分组在一起并轻松移动整个组来手动重新组织布局。

现在,我想要一个按钮来切换这些组“框”的显示,但是继续显示所有非父节点。 我首先在父节点上尝试了hide(),但同时也隐藏了子节点,因此我切换到动态应用指定display:hidden的类。
似乎可以解决问题,但是仍然可以单击隐藏框,并应用cytoscape默认的“视觉反馈”进行单击,以显示隐藏框仍位于的区域。

我尝试了很多无效的方法:
-disable events from my hidden style class: tried events:no我应该将其报告为错误吗?
-.ungrabify()。unselectify()。panify()。lock()
-点击:销毁事件对象
-设置e.target._private.active = false

我尝试了一个讨厌的hack:设置e.target._private.position = {} 该事件仍然被触发,但破坏位置成功阻止了“视觉反馈”的发生,我的盒子实际上保持为“隐藏”状态。 但是,该事件仍然发生在错误的目标上:盒子上,而不是在cytoscape容器的空白处。我可以继续黑客攻击,然后再使用它,但是没有更简单的解决方案吗?

是否可以简单真实地传递隐藏的父节点事件?

1 个答案:

答案 0 :(得分:1)

您没有正确使用events

cy.$('node').forEach(node => {
    node.events = 'no'; // will not work
});

以下内容确实有效,并且您还可以随时恢复事件。

cy.$('node').forEach(node => {
    node.style('events', 'no');
});
相关问题