ChartJS 如何在更改输入字段时更改图表JS标题文本?

jucafojl  于 2023-10-18  发布在  Chart.js
关注(0)|答案(3)|浏览(174)

我有一个图表JS和它的顶部我有一个输入字段。当我想做的是让用户输入任何他想在输入字段和当他完成输入在这个输入字段。然后他的图表JS标题文本更改为他在输入字段中所写的内容。因此,在下面的图像中,此框包含“图表标题”是一个输入字段。我希望用户在那里输入,当它完成后,图表标题文本“这是一个图表”的变化是什么写在输入字段。

HTML

<input  type="text" style="border:1px solid white;background-color: #E9E8E6; color: black;  text-align: center;" placeholder = "Chart Title">    <!--The input field that takes user input and when its done I want to change the chart JS title text which have the text "This is a chart" to be changed to the input field text -->
                                    <div class="card-body">
                                      <canvas id="barChart_3"></canvas>

JS

var dzSparkLine = function(){
    let draw = Chart.controllers.line.__super__.draw; //draw shadow
    
    var screenWidth = $(window).width();
    

    
    var barChart3 = function(){
        //stalked bar chart
        if(jQuery('#barChart_3').length > 0 ){
            const barChart_3 = document.getElementById("barChart_3").getContext('2d');
            //generate gradient
            const barChart_3gradientStroke = barChart_3.createLinearGradient(50, 100, 50, 50);
            barChart_3gradientStroke.addColorStop(0, "rgba(19, 180, 151, 1)");
            barChart_3gradientStroke.addColorStop(1, "rgba(19, 180, 151, 0.5)");

            const barChart_3gradientStroke2 = barChart_3.createLinearGradient(50, 100, 50, 50);
            barChart_3gradientStroke2.addColorStop(0, "rgba(43, 193, 85, 1)");
            barChart_3gradientStroke2.addColorStop(1, "rgba(43, 193, 85, 1)");

            const barChart_3gradientStroke3 = barChart_3.createLinearGradient(50, 100, 50, 50);
            barChart_3gradientStroke3.addColorStop(0, "rgba(208, 116, 7, 1)");
            barChart_3gradientStroke3.addColorStop(1, "rgba(208, 116, 7, 1)");
            
            barChart_3.height = 100;
          
            let barChartData = {
                defaultFontFamily: 'Poppins',
                labels: [ 2023,2024,2025,2026,2027],
                datasets: [100,200,500,700,800]     };

            new Chart(barChart_3, {
                type: 'bar',
                data: barChartData,
                options: {
                    legend: {
                        display: true,
                        position: 'right'
                    }, 
                    title: {
                        display: true,text: 'This is a chart'        // the text I want to change
                    },
                    tooltips: {
                        mode: 'index',
                        intersect: false
                    },
                    responsive: true,
                        scales: {
        yAxes: [{
          scaleLabel: {
            display: true,
            labelString: ''
          }
        }],
        xAxes: [{
          scaleLabel: {
            display: true,
            labelString: 'Years'
          }
        }],
      }
    
                }
            });
pbpqsu0x

pbpqsu0x1#

您需要将new Chart放入一个变量中,该变量可在用户完成输入时运行的函数中访问。
之后,您可以拨打:

chartVariable.options.title.text = userInput;
chartVariable.update();

查看fiddle链接,在创建图表后,我将标题从ffff更新为dddd:https://jsfiddle.net/Leelenaleee/0vxcwqft/4/

s1ag04yj

s1ag04yj2#

我不知道如何改变内置的标题,但你可以隐藏它或省略它,并使用一个常规的标题元素,而不是,如果这对你的作品,那么这是一个工作的解决方案
一种方法是监听输入值的变化,然后在每次变化时抓住它并将其添加到标题中,就像这样:

var chartTitleInput = document.getElementById("chart-title-input");
var chartTitle = document.getElementById("chart-title")

chartTitleInput.addEventListener("change", function(){
  var title = chartTitleInput.value;
  chartTitle.textContent = title;
})
<input id="chart-title-input" type="text">
<h1 id="chart-title"></h1>

我使用了change事件,但如果你喜欢,你可以使用keyupkeydown事件。change事件只会在输入值发生变化时触发,并且每次都发生变化。只有当当前值与前一个值不相同时,用户才能在按下enter或离开输入字段时看到更改(输入字段失去焦点),因为这样change事件不会触发,而keyup事件将触发,例如。

yhuiod9q

yhuiod9q3#

标题是一个包含文本和一些属性的对象:

let myTitle = {
    text: 'my chart title',
    color: 'green',
};

在最近版本的chart js中,标题是一个插件,所以:
如果你在创建图表之前把标题放在配置中,

let chartConfig = {
...
};
chartConfig.options.plugins.title = myTitle;
let chart = new Chart(ctx, chartConfig);

您也可以在已经显示的图表中设置它:

chart.options.plugins.title = myTitle;

相关问题