如何使用d3.js选择器删除处理程序
How do you remove a handler using a d3.js selector
我使用正在更新的d3选择器意外地将同一事件处理程序覆盖在svg元素上。
add_listeners = function() {
d3.selectAll(".nodes").on("click", function() {
//Event handler to highlight clicked d3 element
});
jQuery('#some_navigation_button').on('click', function() {
//Event handler
});
jQuery('#some_refresh_button').on('click', function() {
//Event handler that re-draws some d3 svg elements
});
//... 5 other navigation and d3 handlers
}
add_listeners()
正在重新添加相同的处理程序。所以我尝试了
add_listeners = function() {
d3.selectAll(".nodes").off();
jQuery('#some_navigation_button').off();
jQuery('#some_refresh_button').off();
d3.selectAll(".nodes").on("click", function() {
//Event handler
});
jQuery('#some_navigation_button').on('click', function() {
//Event handler
});
jQuery('#some_refresh_button').on('click', function() {
//Event handler that re-draws some d3 svg elements
});
//... 5 other navigation and d3 handlers
}
,运气不佳。
注意:使用d3 v2.9.1,
发现尽管d3 v2.9.1不支持.off()
,但有一个替代方案.on('click',null)
完全:
add_listeners = function() {
// Remove handler before adding, to avoid superfluous handlers on elements.
d3.selectAll(".nodes").on('click',null);
d3.selectAll(".nodes").on("click", function() {
//Event handler
});
}
参考:
https://github.com/d3/d3-selection#selection_on
相关文章:
- 使用jquery删除输入框上的外部处理程序/库
- jQuery使用.of()删除事件处理程序时出现的问题
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- JS:删除带有接受参数的处理程序的事件侦听器
- 如何删除DOM事件处理程序的重复JavaScript代码
- AngularJS-由$scope创建的作用域何时执行$new()已删除.垃圾收集器或Angular负责处理它吗
- 处理饼干(删除)
- node.js-express.js API删除http后处理程序
- AngularJS:如何从指令添加的元素中删除事件处理程序
- 2秒后删除新的jQuery预处理节点
- 如何使用d3.js选择器删除处理程序
- 使用jquery从URL中删除查询字符串(处理问题)
- 删除节点的内联事件处理程序/属性
- 从 html5 画布中删除所有事件处理程序
- 如何删除 DOM 就绪处理程序,以便可以触发 Javascript 函数
- 删除节点后的 JavaScript 事件处理程序
- PhotoSwipe JS库,删除特定的事件处理程序
- 跨浏览器事件处理程序(添加、删除、触发器)
- 使用处理程序栏模板删除行
- Javascript:在删除相关HTML时,我应该删除一个事件处理程序吗