Javascript D3-另一个事件内的事件绑定

Javascript D3-另一个事件内的事件绑定,javascript,d3.js,Javascript,D3.js,下面是从Scott Murray的书“Web交互式数据可视化”中创建条形图的一些代码。该代码允许生成、更新(添加/删除)和排序条形图。它工作得很好,只是我不能让排序按钮工作。我知道sort函数可以工作,因为我在每个条上都附加了一个click事件(运行sort函数)。因此,当单击一个条时,这些条会被排序 这是JSFIDLE- 这是不起作用的代码段(第74-77行) else if(btnClass == "sort"){ sortBars(); sortLabels(); } 问

下面是从Scott Murray的书“Web交互式数据可视化”中创建条形图的一些代码。该代码允许生成、更新(添加/删除)和排序条形图。它工作得很好,只是我不能让排序按钮工作。我知道sort函数可以工作,因为我在每个条上都附加了一个click事件(运行sort函数)。因此,当单击一个条时,这些条会被排序

这是JSFIDLE-

这是不起作用的代码段(第74-77行)

else if(btnClass == "sort"){
    sortBars();
    sortLabels();
}

问题在于为单击事件设置处理程序函数的方式。您将选择所有按钮并附加一个单独的处理程序,该处理程序在内部确定要执行的操作。此处理程序运行代码来更新所有按钮的栏,而不管之前发生了什么

在您的特定情况下,这意味着排序已正确完成,并设置了相应的转换,但随后会立即被更新条的代码取消(以处理添加/删除的值)。在这种情况下,这不起任何作用,因此唯一的效果是取消排序处理程序设置的所有内容

要修复此问题,只需在调用排序函数后退出函数:

return;

完成演示。

这很有意义。谢谢所以,作为最佳实践,您是否建议为每个按钮类创建单独的事件处理程序?是的,我将为每个按钮创建单独的处理程序函数。