gpt4 book ai didi

javascript - Google Visualization 表格图表单击并返回行/列值在 Mozilla 浏览器中不起作用

转载 作者:行者123 更新时间:2023-11-30 20:02:47 24 4
gpt4 key购买 nike

我在以下代码中遇到了 Chrome 和 Mozilla 浏览器之间的差异问题。

当您点击一个单元格时,代码会返回点击的行/列。它在 Chrome 中运行良好,但是当我在 Mozilla 中单击一个单元格时,没有任何反应。

我认为它与这段代码有关,但我真的不知道。

var selection = table.getChart().getSelection();
if (selection.length === 0)
return;

var e = event || window.event;
var cell = e.target; //get selected cell

我引用的是几年前的这篇文章。这篇文章中的代码在 Chrome 中有效,但在 Mozilla 中无效,你点击但没有任何反应。

https://stackoverflow.com/questions/20165281/google-chart-getselection-doesnt-have-column-property/33445620#33445620

这是我的完整程序。知道如何解决 Chrome 与 Mozilla 的冲突吗??

一如既往的感谢!

google.charts.load('current', {
'packages': ['corechart', 'table', 'gauge', 'controls', 'charteditor']
});

renderChart_onPageLoad();

function renderChart_onPageLoad() {
google.charts.setOnLoadCallback(function() {
drawTable();
}); //END setOnLoadCallback
} //END function renderChart_onEvent

function drawTable() {
var jsonArray = jsonDataArray_1to1(json);

//Modify header row to include id and label
jsonArray = arrayHeaderRow_id_label_date(jsonArray);
console.log('jsonArray'); console.log(jsonArray);

var data = google.visualization.arrayToDataTable(jsonArray, false); // 'false' means that the first row contains labels, not data.
//console.log('data');
//console.log(data);

var dashboard = new google.visualization.Dashboard(document.getElementById('div_dashboard'));

var categoryPicker1 = new google.visualization.ControlWrapper({
'controlType': 'CategoryFilter',
'containerId': 'div_categoryPicker1',
'matchType': 'any',
'options': {
'filterColumnIndex': 0, //Column used in control
'ui': {
//'label': 'Actual State:',
//'labelSeparator': ':',
'labelStacking': 'vertical',
'selectedValuesLayout': 'belowWrapping',
'allowTyping': false,
'allowMultiple': false,
'allowNone': true
}
}
});

var table = new google.visualization.ChartWrapper({
chartType: 'Table',
containerId: 'div_table',
options: {
allowHtml: true
}
});

dashboard.bind([categoryPicker1], [table]);
dashboard.draw(data);

google.visualization.events.addListener(table, 'select', function() {

//ORIGINAL from older post https://stackoverflow.com/a/33445620
var selection = table.getChart().getSelection();
if (selection.length === 0)
return;

var e = event || window.event;
var cell = e.target; //get selected cell

document.getElementById('output1').innerHTML = "Row: " + selection[0].row + " Column: " + cell.cellIndex;

//NEW additional requirements

var tableDataView = table.getDataTable();

var selectedRow = selection[0].row;
var selectedCol = cell.cellIndex;

document.getElementById('output2').innerHTML = "selectedRow: " + selectedRow + " selectedCol: " + selectedCol;

var colID = tableDataView.getColumnId(selectedCol);
var colLabel = tableDataView.getColumnLabel(selectedCol);

document.getElementById('output3').innerHTML = "colID: " + colID + " colLabel: " + colLabel;

});
}





//Library

function jsonDataArray_1to1(json) {
//DYNAMIC JSON ARRAY

var dataArray_cln = [];

//A. The desired table requires the fixed columns of ..... to ..... these are directly taken from the JSON.
var dataArray_keys = Object.keys(json[0]);

dataArray_cln.push(dataArray_keys);

//Add rows 1 to json.length with null values
var dataArray_rows = json.length;
var dataArray_cols = dataArray_keys.length;

for (i = 0; i < dataArray_rows; i++) {
dataArray_cln.push(Array(dataArray_cols).fill(null));
}

//Update array from json data
for (i = 0; i < dataArray_rows; i++) {
//[i + 1] because row 0 is the header, push begins with row 1
//dataArray_cln[row][col]

//Content in row "i" is positioned into dataArray_cln[row][col] incrementing "j" to pull each key name from dataArray_keys
for (var j = 0; j < dataArray_keys.length; j++) {
eval('dataArray_cln[i + 1][' + j + '] = json[i].' + dataArray_keys[j]);
}
}

//console.log(dataArray_cln);
return dataArray_cln;
}

function arrayHeaderRow_id_label_date(arr) {
for (var i = 0; i < arr[0].length; i++) {
var valueOrig = arr[0][i];
var valueNew;
switch (true) {
case valueOrig === 'wd':
valueNew = JSON.parse('{"id":"' + valueOrig + '", "label":"' + valueOrig + '", "type": "date"}');
break;
default:
valueNew = JSON.parse('{"id":"' + valueOrig + '", "label": "' + valueOrig + '"}');
}
arr[0][i] = valueNew;
}
return arr;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id='div_dashboard'>
<div id='div_categoryPicker1'></div>
<div id='div_table'></div>
</div>

<div id="output1"></div><br/>
<div id="output2"></div><br/>
<div id="output3"></div><br/>

<script>
var json = [{
"division": "GS",
"m1": 100.000000,
"m2": 100.000000,
"m3": null,
"m4": null,
"m5": null,
"m6": null,
"m7": null,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
},
{
"division": "GS",
"m1": 100.000000,
"m2": 90.000000,
"m3": null,
"m4": null,
"m5": null,
"m6": null,
"m7": null,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
},
{
"division": "PS",
"m1": null,
"m2": null,
"m3": 100.000000,
"m4": null,
"m5": 100.000000,
"m6": 100.000000,
"m7": 75.000000,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
},
{
"division": "PS",
"m1": null,
"m2": null,
"m3": 100.000000,
"m4": 100.000000,
"m5": 100.000000,
"m6": 100.000000,
"m7": 80.000000,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
}
];

</script>

最佳答案

google 的表格图表生成正常的 html <table> .

而不是使用谷歌的 'select'事件,
我们可以分配一个标准 'click'表的 <td> 事件元素。

等到表格图表的'ready'事件触发。
然后将点击处理程序分配给单元格。

获取列索引--> cell.cellIndex
到行索引 --> cell.closest('tr').rowIndex

google.visualization.events.addListener(table, 'ready', function() {
var container = document.getElementById(table.getContainerId());
Array.prototype.forEach.call(container.getElementsByTagName('TD'), function(cell) {
cell.addEventListener('click', selectCell);
});

function selectCell(sender) {
var cell = sender.target;
var row = cell.closest('tr');
document.getElementById('output1').innerHTML = "Row: " + (row.rowIndex - 1) + " Column: " + cell.cellIndex;

//NEW additional requirements

var tableDataView = table.getDataTable();

var selectedRow = row.rowIndex - 1; // adjust for header row (-1)
var selectedCol = cell.cellIndex;

document.getElementById('output2').innerHTML = "selectedRow: " + selectedRow + " selectedCol: " + selectedCol;

var colID = tableDataView.getColumnId(selectedCol);
var colLabel = tableDataView.getColumnLabel(selectedCol);

document.getElementById('output3').innerHTML = "colID: " + colID + " colLabel: " + colLabel;
}

});

请参阅以下工作片段...

google.charts.load('current', {
'packages': ['corechart', 'table', 'gauge', 'controls', 'charteditor']
});

renderChart_onPageLoad();

function renderChart_onPageLoad() {
google.charts.setOnLoadCallback(function() {
drawTable();
}); //END setOnLoadCallback
} //END function renderChart_onEvent

function drawTable() {
var jsonArray = jsonDataArray_1to1(json);

//Modify header row to include id and label
jsonArray = arrayHeaderRow_id_label_date(jsonArray);
console.log('jsonArray'); console.log(jsonArray);

var data = google.visualization.arrayToDataTable(jsonArray, false); // 'false' means that the first row contains labels, not data.
//console.log('data');
//console.log(data);

var dashboard = new google.visualization.Dashboard(document.getElementById('div_dashboard'));

var categoryPicker1 = new google.visualization.ControlWrapper({
'controlType': 'CategoryFilter',
'containerId': 'div_categoryPicker1',
'matchType': 'any',
'options': {
'filterColumnIndex': 0, //Column used in control
'ui': {
//'label': 'Actual State:',
//'labelSeparator': ':',
'labelStacking': 'vertical',
'selectedValuesLayout': 'belowWrapping',
'allowTyping': false,
'allowMultiple': false,
'allowNone': true
}
}
});

var table = new google.visualization.ChartWrapper({
chartType: 'Table',
containerId: 'div_table',
options: {
allowHtml: true
}
});

dashboard.bind([categoryPicker1], [table]);
dashboard.draw(data);

google.visualization.events.addListener(table, 'ready', function() {
var container = document.getElementById(table.getContainerId());
Array.prototype.forEach.call(container.getElementsByTagName('TD'), function(cell) {
cell.addEventListener('click', selectCell);
});

function selectCell(sender) {
var cell = sender.target;
var row = cell.closest('tr');
document.getElementById('output1').innerHTML = "Row: " + (row.rowIndex - 1) + " Column: " + cell.cellIndex;

//NEW additional requirements

var tableDataView = table.getDataTable();

var selectedRow = row.rowIndex - 1; // adjust for header row (-1)
var selectedCol = cell.cellIndex;

document.getElementById('output2').innerHTML = "selectedRow: " + selectedRow + " selectedCol: " + selectedCol;

var colID = tableDataView.getColumnId(selectedCol);
var colLabel = tableDataView.getColumnLabel(selectedCol);

document.getElementById('output3').innerHTML = "colID: " + colID + " colLabel: " + colLabel;
}

});

}





//Library

function jsonDataArray_1to1(json) {
//DYNAMIC JSON ARRAY

var dataArray_cln = [];

//A. The desired table requires the fixed columns of ..... to ..... these are directly taken from the JSON.
var dataArray_keys = Object.keys(json[0]);

dataArray_cln.push(dataArray_keys);

//Add rows 1 to json.length with null values
var dataArray_rows = json.length;
var dataArray_cols = dataArray_keys.length;

for (i = 0; i < dataArray_rows; i++) {
dataArray_cln.push(Array(dataArray_cols).fill(null));
}

//Update array from json data
for (i = 0; i < dataArray_rows; i++) {
//[i + 1] because row 0 is the header, push begins with row 1
//dataArray_cln[row][col]

//Content in row "i" is positioned into dataArray_cln[row][col] incrementing "j" to pull each key name from dataArray_keys
for (var j = 0; j < dataArray_keys.length; j++) {
eval('dataArray_cln[i + 1][' + j + '] = json[i].' + dataArray_keys[j]);
}
}

//console.log(dataArray_cln);
return dataArray_cln;
}

function arrayHeaderRow_id_label_date(arr) {
for (var i = 0; i < arr[0].length; i++) {
var valueOrig = arr[0][i];
var valueNew;
switch (true) {
case valueOrig === 'wd':
valueNew = JSON.parse('{"id":"' + valueOrig + '", "label":"' + valueOrig + '", "type": "date"}');
break;
default:
valueNew = JSON.parse('{"id":"' + valueOrig + '", "label": "' + valueOrig + '"}');
}
arr[0][i] = valueNew;
}
return arr;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id='div_dashboard'>
<div id='div_categoryPicker1'></div>
<div id='div_table'></div>
</div>

<div id="output1"></div><br/>
<div id="output2"></div><br/>
<div id="output3"></div><br/>

<script>
var json = [{
"division": "GS",
"m1": 100.000000,
"m2": 100.000000,
"m3": null,
"m4": null,
"m5": null,
"m6": null,
"m7": null,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
},
{
"division": "GS",
"m1": 100.000000,
"m2": 90.000000,
"m3": null,
"m4": null,
"m5": null,
"m6": null,
"m7": null,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
},
{
"division": "PS",
"m1": null,
"m2": null,
"m3": 100.000000,
"m4": null,
"m5": 100.000000,
"m6": 100.000000,
"m7": 75.000000,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
},
{
"division": "PS",
"m1": null,
"m2": null,
"m3": 100.000000,
"m4": 100.000000,
"m5": 100.000000,
"m6": 100.000000,
"m7": 80.000000,
"m8": null,
"m9": null,
"m10": null,
"m11": null,
"m12": null,
}
];

</script>

关于javascript - Google Visualization 表格图表单击并返回行/列值在 Mozilla 浏览器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53197724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com