D3从选择中的一个元素中删除单击事件

时间:2014-04-10 07:18:22

标签: javascript jquery d3.js

我在D3中有一个类说:选择器,我需要从选择中删除click事件

d3.selectAll('.selectors').on('click',function(){
       //Remove the currently clicked element from the selection.
});

我有两个问题:

  1. 删除的元素应该移动到页面的不同部分,我需要删除它上面的click事件。

  2. 此外,是否可以将删除的元素重新插入到选择中以执行其他操作,例如再次单击已删除的元素?

  3. 修改

    找到问题1的解决方案

    d3.selectAll('.selectors').on('click',function(){
               //Remove the currently clicked element from the selection.
               d3.select(this).on('click',null);
        });
    

    这是正确的方法吗?还是有更优雅的方法?

    A Demo Fiddle

2 个答案:

答案 0 :(得分:1)

这是更新的jquery,它适用于您的案例

$(document).ready(function(){
$(document).on('click','.selectors',function(e){
 //$(document).off( 'click','.selectors');
  if(e.target.onclick==null)
  {
      e.target.onclick=
          function(){
          void(0);
      };
     alert('test');
     console.log('Hello');
  }
});
});

答案 1 :(得分:0)

对于问题1,最好的方法(据我所知)是重新定义D3本身的点击事件:

d3.selectAll('.selectors').on('click',function(){
           //Remove the currently clicked element from the selection.
           d3.select(this).on('click',null);
    });

对于问题2,但是,一旦将click事件回调变为null,唯一的方法是再次重新定义click事件,可能是递归的:

function clickDefine() {
    d3.selectAll('.selectors').on('click', function () {
        //Remove the currently clicked element from the selection.
        console.log('Hello')
        d3.select(this).on('click', null);
        setTimeout(function(){clickDefine();},1000)
    });
}

此功能使点击事件在点击时处于非活动状态1秒。并重新激活这一点。我希望这是一个有效的解决方案。