Javascript 多次调用事件

Javascript 多次调用事件,javascript,angularjs,Javascript,Angularjs,在fusion图表中,单击图例后,如果单击向下钻取点,则表示单击事件正在调用多次,因为显示了此多个向下钻取弹出窗口 指示 angular .module(“rootApp”) .指令('fchart',函数(chartExportService、$timeout、$uibModal、chartDrillDownService、appNotifyService){ 返回{ 限制:“E”, 范围:{ cid:“@”, 数据格式:“@”, 宽度:“@”, 高度:“@”, 数据源:“@”, 类型:“@”

在fusion图表中,单击图例后,如果单击向下钻取点,则表示单击事件正在调用多次,因为显示了此多个向下钻取弹出窗口

指示
angular
.module(“rootApp”)
.指令('fchart',函数(chartExportService、$timeout、$uibModal、chartDrillDownService、appNotifyService){
返回{
限制:“E”,
范围:{
cid:“@”,
数据格式:“@”,
宽度:“@”,
高度:“@”,
数据源:“@”,
类型:“@”,
图表:“=”,
控件:“=”,
数据:“@”
},
链接:函数(范围、元素、属性){
scope.internalControl=scope.control | |{};
var图表=空;
var exportList=[];
var agentData={};
scope.actionAfterExport='打印';
var chartConfigObject={
类型:scope.type,
宽度:scope.width,
高度:scope.height,
renderAt:元素[0],
id:scope.cid,
dataFormat:scope.dataFormat | |“json”,
数据源:attrs.dataSource,
活动:{
“导出前”:函数(evtObj、argObj){
var exportStatus=document.getElementById('chart-export-status');
if(出口状态){
exportStatus.style.display='inline';
}
},
“导出”:函数(eventObj、dataObj){
var exportStatus=document.getElementById('chart-export-status');
if(出口状态){
exportStatus.style.display='none';
}
},
“dataplotclick”:功能(电动汽车、道具){
}
}
};
//为fusion图表中的图表向下搜索调用注册方法
//当fusion chart在窗口范围内查找这些方法时,这些
//需要在窗口作用域中注册函数
window.chartDrillDown=函数(信息){
chartDrillDownService.doDrillDown(“chartDrillDown”,信息);
};
window.popupforTop10StnAndFisPCharts=函数(信息){
var检验=真;
如果(测试){
chartDrillDownService.doDrillDownFisPChart(“Popupfortop10standFispCharts”信息);
}
测试=假;
};
window.activityCountJs=函数(信息){
chartDrillDownService.doDrillDown('activityCountJs',信息);
};
window.chartpopfortop10bystationcharts=函数(信息){
chartDrillDownService.doDrillDownFisPChart(“chartPopUpForTop10ByStationCharts”,信息);
};
window.chartDrillDownForLabels=函数(信息){
chartDrillDownService.doTreeDrillDown('chartDrillDownForLabels',信息);
};
discover={};
window.Reveal.PlantView={
钻孔处理程序:{}
};
window.Reveal.Compare={
钻孔处理程序:{}
};
window.Reveal.PlantView.DrillHandler.PopupActivity=函数(信息){
chartDrillDownService.doDrillDown(“PlantView-PopupActivity”,信息);
};
window.Reveal.PlantView.DrillHandler.DrillActivity=函数(信息){
chartDrillDownService.doDrillDown(“PlantView-DrillActivity”,信息);
};
window.Reveal.Compare.DrillHandler.DrillHours=函数(信息){
chartDrillDownService.doDrillHours('Compare-DrillHours',信息);
};
window.Reveal.Compare.DrillHandler.DrillWeekly=函数(信息){
chartDrillDownService.doDrillWeekly('Compare-DrillWeekly',信息);
};
window.Reveal.Compare.DrillHandler.DrillDay=函数(信息){
chartDrillDownService.doDrillDay('Compare-DrillDay',信息);
};
var createfchart=函数(){
//如果上一个图表存在,请处理
if(图表和图表处理){
chart.dispose();
}
//设置使FusionCharts在标记包含在HTML头中时正确呈现
FusionCharts.options.SVGDefinitionURL='绝对';
图表=新的FusionCharts(图表配置对象);
/*@todo验证ready函数是否可以以更好的方式替换*/
元素(文档).ready(函数(){
元素。就绪(函数(){
//仅在编译完元素和DOM后才渲染图表。
chart.showBorder=0;
chart=chart.render();
chart.uniqueId=scope.data | | null;
if(范围图表){
范围.图表.推送(图表);
}
});
});
};
};

欢迎使用任何指针!

事件可能会被DOM层次结构中的多个目标调用。请使用控制台对此进行验证。注销事件的当前目标

如果是这种情况,那么停止此操作的一个方法是对事件调用stopPropagation()

注释行可以取消注释以测试您的情况:

"beforeExport": function(evtObj, argObj) {
// console.log(evtObj.currentTarget);
var exportStatus = document.getElementById('chart-export-status');
if (exportStatus) {
    exportStatus.style.display = 'inline';
}
//evtObj.stopPropagation();

}

这可能有助于解决您的问题

Event.stopPropagation()
阅读文档

简短回答 选择1 创建另一个存储图例可见性状态的
$scope
变量。类似于CSS复选框Hack。然后使用
ng if
ng show
ng hide
指令根据
$scope
变量的值显示/隐藏预制DOM元素

选择2 生成向下钻取弹出窗口的任何代码,将其从angular指令/表达式中删除,并将其放置在外部函数中。让该函数检查最近是否显示弹出窗口

  • 如果有:不显示弹出窗口
  • 如果有