我使用MaterializeCss可折叠元素。我在模板HTML文件中使用JavaScript对其进行了初始化:
//activates collapsible bars
var collaps = document.querySelectorAll('.collapsible');
M.Collapsible.init(collaps);
然后,我向该文件添加了一些功能(不同时间的不同功能),可折叠功能停止工作:当我按下该文件时,它不会展开。
我不使用任何其他框架。
我读过其他与此类似的主题,人们说这是因为array.push方法的缘故,并建议重新初始化可折叠对象。
我尝试重新初始化,但没有任何改变。
我可能做得不正确,或者还有其他问题。
为什么会发生这种情况以及如何解决它的理论是什么?
我现在添加的功能如下(我没有为我的数据修改它们,但是这发生了)。这与读取复选框和<a>
标签(可折叠元素中的元素)的值并调用后端函数有关。
function getCheckedNames() {
//getting all checkboxes
const allCheckboxes = Array.from(document.getElementsByClassName("filled-in"));
//getting all <a> tag elements as a native Array.
const names = Array.from(document.getElementsByTagName("a"));
//Reduce from all names to only those that are "checked."
return allCheckboxes.reduce((arr, cb, i) => {
// Store the corresponding employee name for any checked checkbox
if (cb.value === true)
arr.push(names[i].value);
return arr;
}, []);
}
function requestCals() {
const chosenNames = function getCheckedNames()
google.script.run
.withUserObject(chosenNames)
.withSuccessHandler(requestCalendarEvents)
.loopToGetCals(JSON.stringify({names: chosenNames}));
}
function requestCalendarEvents(calendars, chosenNames) {
if (typeof calendars === "string")
calendars = JSON.parse(calendars);
if (typeof chosenNames === "string")
chosenNames = JSON.parse(chosenNames);
if (!chosenNames)
chosenNames = getCheckedNames();
const employees = {
names: chosenNames,
cals: calendars
};
//read inputs of start and end dates
const startdate = document.getElementById("startDate").value
const enddate = document.getElementById("endDate").value
//getting dates as UTC milliseconds
const startDate = new Date(startdate).getTime();
const endDate = new Date(enddate).getTime();
//call backend function to get calendar events
google.script.run
.withSuccessHandler(getCalendarEvents)
.getCalendarEvents(JSON.stringify(employees) startDate, endDate);
}