javascript - onchange 事件未正确跟踪

标签 javascript

我有一个表单,我想跟踪任何更改。现在我已将其设置为当用户退出页面时,会显示一个警告框,说明对表单进行了多少更改。但是,它一直注册为 0。我已经测试过向 inputChanges 函数添加一个警报,告诉我发生了更改并且警报触发,但当我退出页面时,计数仍然注册为 0...

这是我的脚本:

window.onload = function() {
    var totalChanges = "";
    var inputHandles = 0;
    var selectHandles = 0;
    var textAreaHandles = 0;

window.onbeforeunload = function(){
    alert("Total Form Changes:" + totalChanges);
}//onbeforeunload

   var totalChanges = inputHandles + selectHandles + textAreaHandles;

   function inputChanges() {
   inputHandles++; 
   alert("Change");
   }

   var inputs = document.getElementsByTagName("input"); 
   for (i = 0; i < inputs.length; i++){
    inputs[i].onchange = inputChanges;
   }    

   function selectChanges(){
   selectHandles++;
   }

   var selects = document.getElementsByTagName("select");
   for (i = 0; i < selects.length; i++){
   selects[i].onselect = selectChanges;
  }

  function textAreaChanges(){
   textAreaHandles++;
  }

   var textAreas = document.getElementsByTagName("textarea");
  for (i = 0; i < textAreas.length; i++){
   textAreas[i].onchange = textAreaChanges;
  }
}//Onload

最佳答案

您在此处声明totalChanges:

var totalChanges = "";

...然后在这里重新声明它:

var totalChanges = inputHandles + selectHandles + textAreaHandles;

...此时您要添加的内容全部为 0

您需要在需要该值的位置进行计算:

window.onbeforeunload = function(){
    totalChanges = inputHandles + selectHandles + textAreaHandles;
    alert("Total Form Changes:" + totalChanges);
}

或者最初设置totalChanges = 0,然后在每次其他变量发生变化时递增它,但这比较笨拙。

另请注意,您不是在计算现在值与其起始值不同的字段数量,而是在计算单独编辑的数量。因此,如果用户两次更改某个字段,而第二次更改又恢复为原始值,您的代码会将其跟踪为两次更改(逻辑上它是零更改)。

关于javascript - onchange 事件未正确跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039638/

相关文章:

javascript - 如何使用其不同部分制作垄断板?

JavaScript 在继续之前需要等待请求

javascript - 如何使用相同的键合并数据

javascript - 从两个变量计算任务的紧迫性

javascript - 如何在 Angular js 的工厂/服务中使用 $cookie?

javascript - jQuery/JavaScript 如何处理绑定(bind)到同一元素和事件的多个事件处理程序,结果是什么?

javascript - 获取 console.log() 以显示自定义对象描述

javascript - 如何使图标与文本左侧分开?

javascript - 直方图钟形曲线上的正确旗帜位置

javascript - 如何在用户喜欢 MVC 架构中的推文后使用 AJAX 调用显示推文的点赞计数