Javascript 如何停止每次触发onChange的函数?

Javascript 如何停止每次触发onChange的函数?,javascript,function,select,onchange,options,Javascript,Function,Select,Onchange,Options,我正在创建一个允许教师为学生创建报告的应用程序。My显示了完整的代码,它具有我想要的基本功能。 但是,当用户从选项中选择时,printSelection函数运行onChange,将选择添加到collatedArray function printSelection(e) { collatedArray.push(e.value); console.log(collatedArray); } 问题是,如果用户改变主意,它会将这两个选项都添加到最终报告中 有没有一种方法可以运行此功能,但前

我正在创建一个允许教师为学生创建报告的应用程序。My显示了完整的代码,它具有我想要的基本功能。 但是,当用户从选项中选择时,printSelection函数运行onChange,将选择添加到collatedArray

function printSelection(e) {
  collatedArray.push(e.value);
  console.log(collatedArray);
}
问题是,如果用户改变主意,它会将这两个选项都添加到最终报告中


有没有一种方法可以运行此功能,但前提是用户以前没有从中进行选择?

您的问题是,在每个
onchange
事件上推送数据,并且只有当用户只选择一次时,这样做才会起作用,但您可以通过使用简单对象保存数据并每次用户选择它时覆盖正确的属性来避免这种情况,这样您将只存储所需的输入,下面是一个简单的示例,请注意,您可以像我一样使用事件委派,而不是向每个
元素添加事件侦听器,请避免使用内联JS它有很多缺点

var inputsElement=document.querySelector(“下拉输入”),
输入={};
inputsElement.onchange=函数(e){
//注意,我没有检查元素的类型
//因为我只有两个元素,所以
//很明显,其中一个正在触发“onchange”事件
//因此,我根据select元素设置了正确的属性名
输入[e.target.name]=e.target.value;
//只是为了调试;)
console.clear();
控制台日志(输入);
}

宽度:
0
10
20
30
高度:
0
10
20
30

让选择=e.value然后
if(选择===e.value){ <代码> >这是没有意义的,它始终是真的!你把这个值分配给变量<代码>选择<代码>,然后检查它是否声明,因为它不需要感谢@ SayMySimAM。我现在已经删除它了。谢谢!欢迎考虑,请考虑为你的实况代码而不是外部Link kStA发布堆栈片段。nks很多,我已经用这个让它工作。非常感谢,伟大而简单的解决方案!