我在D3中有一个类说:选择器,我需要从选择中删除click事件
d3.selectAll('.selectors').on('click',function(){
//Remove the currently clicked element from the selection.
});
我有两个问题:
删除的元素应该移动到页面的不同部分,我需要删除它上面的click事件。
此外,是否可以将删除的元素重新插入到选择中以执行其他操作,例如再次单击已删除的元素?
修改
找到问题1的解决方案
d3.selectAll('.selectors').on('click',function(){
//Remove the currently clicked element from the selection.
d3.select(this).on('click',null);
});
这是正确的方法吗?还是有更优雅的方法?
答案 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秒。并重新激活这一点。我希望这是一个有效的解决方案。