Javascript onchange事件未正确跟踪

Javascript onchange事件未正确跟踪,javascript,Javascript,我有一个表格,我想跟踪任何更改。现在我已经设置好了,当用户退出页面时,会显示一个警告框,说明对表单进行了多少更改。但是,它一直注册0。我已经测试过向inputChanges函数添加一个警报,告诉我发生了更改并触发警报,但是当我退出页面时,计数仍然注册为0 这是我的剧本: window.onload = function() { var totalChanges = ""; var inputHandles = 0; var selectHandles = 0; v

我有一个表格,我想跟踪任何更改。现在我已经设置好了,当用户退出页面时,会显示一个警告框,说明对表单进行了多少更改。但是,它一直注册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
window.onload=function(){
var totalChanges=“”;
var inputHandles=0;
var-selectHandles=0;
var textAreaHandles=0;
window.onbeforeunload=函数(){
警报(“总表单更改:+totalChanges”);
}//在卸载之前
var totalChanges=inputHandles+selectHandles+textAreaHandles;
函数inputChanges(){
inputHandles++;
警报(“变更”);
}
var inputs=document.getElementsByTagName(“输入”);
对于(i=0;i
您在此处声明
全部更改

var totalChanges = "";
…然后在此处重新声明:

var totalChanges = inputHandles + selectHandles + textAreaHandles;
…此时,您正在添加的内容都是
0

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

window.onbeforeunload = function(){
    totalChanges = inputHandles + selectHandles + textAreaHandles;
    alert("Total Form Changes:" + totalChanges);
}
或者先设置
totalChanges=0
,然后在其他变量每次更改时增加它,但这更麻烦


还请注意,您没有统计现在值与其起始值不同的字段的数量,而是统计单个编辑的数量。因此,如果用户两次更改一个字段,第二次更改返回到原始值,那么代码将跟踪两次更改(逻辑上是零更改)。

因为用户可以将值更改回原来的值,我建议您将所有
input.value
input.defaultValue
进行比较,然后选中
select.options[select.selectedIndex]defaultSelected

另外,您可能希望将}和警报移动到总更改数之后

像这样的

window.onload = function() {
  var totalChanges = 0;


  window.onbeforeunload = function(){
    var inputs = document.getElementsByTagName("input"); // ditto for "textarea"
    for (var i = 0; i < inputs.length; i++){
      totaChanges +=  inputs[i].value != inputs[i].defaultValue;
    }    
    var selects = document.getElementsByTagName("select");
    for (var i = 0; i < selects.length; i++){
      totalChanges += !selects[i].defaultSelected;
   }

    alert("Total Form Changes:" + totalChanges);
  }//onbeforeunload
}
window.onload=function(){
var totalChanges=0;
window.onbeforeunload=函数(){
var inputs=document.getElementsByTagName(“输入”);//与“textarea”相同
对于(变量i=0;i
这一行似乎有一个额外的引号:
alert(“Total Form Changes:+totalChanges”);
谢谢,我取出了一部分与本文无关的脚本,它被放在了那里……虽然无关紧要,但很好理解。Onselect?试试onChange为什么要将totalChanges初始化为““而不是0?这可能没有什么帮助,因为您将该变量用于数值,而不是字符串。