Jquery 没有图表时如何禁用“打印图表”按钮

Jquery 没有图表时如何禁用“打印图表”按钮,jquery,asp.net-mvc-4,highcharts,Jquery,Asp.net Mvc 4,Highcharts,我有以下代码 $.ajax({ url: '@Url.Action("CollectionsBySuburb", "DashBoard")', data: { Period: 2015 }, success: function (data) { var catArr = data.map(function (o) { return o.Category; }); var paidArr = data.

我有以下代码

$.ajax({
        url: '@Url.Action("CollectionsBySuburb", "DashBoard")',
        data: { Period: 2015 },
        success: function (data) {
            var catArr = data.map(function (o) { return o.Category; });
            var paidArr = data.map(function (o) { return parseInt(o.TotalTax + o.TotalArrears + o.TotalDiscount); });
            var outArr = data.map(function (o) { return parseInt(o.TotalBillAmount - (o.TotalTax + o.TotalArrears + o.TotalDiscount)); });

            $('#CollectionsBySuburb').highcharts({
                chart: {
                    type: 'bar',
                    events: {
                        click: function () {
                            alert();
                        }
                    }
                },
                credits: {
                    enabled: false
                },
                colors: ["#62BD00", "#FA1B02"],
                title: {
                    text: 'Amount  Collection By Suburb'
                },
                xAxis: {
                    categories: catArr
                },
                yAxis: {
                    min: 0,
                    title: {
                        text: 'Amount  ( '' )'
                    }
                },
                legend: {
                    reversed: true
                },
                plotOptions: {
                    series: {
                        stacking: 'normal'
                    }
                },
                tooltip: {
                    pointFormat: '<span style="color:{point.color}">{series.name}</span>: GH₵ <b>{point.y}</b>'
                },
                series: [{
                    name: 'Paid',
                    data: paidArr
                }, {
                    name: 'Outstanding',
                    data: outArr
                }]
            });
        }
    });
 $.ajax({
 //Rendering other chart here
 });
 $.ajax({
 //Rendering other chart here
 });
 $.ajax({
 //Rendering other chart here
 });
 $.ajax({
 //Rendering other chart here
 });
$.ajax({
url:'@url.Action(“CollectionsBySuburb”,“DashBoard”),
数据:{期间:2015},
成功:功能(数据){
var catArr=data.map(函数(o){returno.Category;});
var paidArr=data.map(函数(o){return parseInt(o.TotalTax+o.total欠款+o.TotalDiscount);});
var outArr=data.map(函数(o){return parseInt(o.totalbillmount-(o.TotalTax+o.totallaughts+o.TotalDiscount));});
$(“#郊区收藏”)。高图表({
图表:{
类型:'bar',
活动:{
单击:函数(){
警惕();
}
}
},
学分:{
已启用:false
},
颜色:[“#62BD00”和“#FA1B02”],
标题:{
文本:“按郊区收取的金额”
},
xAxis:{
类别:卡塔
},
亚克斯:{
分:0,,
标题:{
文本:“金额(“”)”
}
},
图例:{
对
},
打印选项:{
系列:{
堆叠:“正常”
}
},
工具提示:{
pointFormat:“{series.name}:GH{point.y}”
},
系列:[{
姓名:“已付”,
数据:paidArr
}, {
名称:'杰出',
数据:输出
}]
});
}
});
$.ajax({
//在这里呈现其他图表
});
$.ajax({
//在这里呈现其他图表
});
$.ajax({
//在这里呈现其他图表
});
$.ajax({
//在这里呈现其他图表
});
所以现在我的要求是,因为我有多个图表,当我点击打印按钮时,我想检查一个图表是否存在,如果存在,然后启用选项,以便用户可以下载它,或者隐藏要下载的选项。我试着用不同的方法,但做不到。感谢您的帮助

您可以使用

出口:{
已启用:false
}

在highchart中构造函数

events: {
                legendItemClick: function () {
                    var series = this.chart.series,
                        index = this.index,
                        allHidden = this.visible ? false : true;

                    $.each(series, function(i, serie){
                        if(serie.visible && i !== index)
                            allHidden = true;
                    });

                    if(!allHidden) {
                        this.chart.exportSVGElements[0].hide();
                    } else {
                        this.chart.exportSVGElements[0].show();
                    }

                }
            }

我不完全理解您的要求,因此我将演示不同的技术

  • 如果没有可用数据,请禁用“导出”按钮:

    exporting: {
        enabled: data.length > 0 ? true : false
    }
    
  • 删除特定按钮(此处为伪条件):

  • 然后在你的highchart对象中

    exporting: {        
            buttons: {
                contextButton: {
                    menuItems:   filterButtons(data)
                 }
           }
    
    请参见此处的代码:

    您可以捕获所有序列,然后对其进行迭代,以检查是否所有序列都被隐藏。如果是,则可以通过
    this.chart.exportSVGElements[0].hide()隐藏按钮函数

    events: {
                    legendItemClick: function () {
                        var series = this.chart.series,
                            index = this.index,
                            allHidden = this.visible ? false : true;
    
                        $.each(series, function(i, serie){
                            if(serie.visible && i !== index)
                                allHidden = true;
                        });
    
                        if(!allHidden) {
                            this.chart.exportSVGElements[0].hide();
                        } else {
                            this.chart.exportSVGElements[0].show();
                        }
    
                    }
                }
    

    示例:

    谢谢您的回答,这已接近我的要求。就像在小提琴中一样,如果我点击序列1,我可以看到图表正在消失。那么,现在如果我点击按钮打印,我想隐藏下载选项。你说的“点击系列1”是什么意思?按钮?对不起,我真的不明白。我的意思是当我点击标记为粗体的系列时,显示的下载选项应该隐藏起来。因为当我点击系列时,图表就消失了。我希望这有帮助。啊,好吧,我想我得到了你想要的。单击图例中的一个系列时,是否要触发按钮的更改?由于我现在时间不够,我还不能提供一个解决方案。但是,你必须把自己挂在“legendItemClick”上,看看这里的一个例子:这就是我所需要的。我正在寻找legendItemClick事件(根据larrydahooster的说法,也感谢他的帮助)来处理。我用另一种方法计算图表的数量,然后按下按钮并禁用它,即使这样也行。但这似乎更专业。谢谢。你能告诉我当我想打印图表时,如何隐藏同一个按钮吗。正如在预览中一样,当用户想要下载图表时,我也会得到要隐藏的按钮。对于导出的图表到图像,您可以在中设置此选项,但对于打印,您需要捕获菜单项,并在调用print()函数之前隐藏元素。例子: