Javascript onchange事件未正确跟踪
我有一个表格,我想跟踪任何更改。现在我已经设置好了,当用户退出页面时,会显示一个警告框,说明对表单进行了多少更改。但是,它一直注册0。我已经测试过向inputChanges函数添加一个警报,告诉我发生了更改并触发警报,但是当我退出页面时,计数仍然注册为0 这是我的剧本:Javascript onchange事件未正确跟踪,javascript,Javascript,我有一个表格,我想跟踪任何更改。现在我已经设置好了,当用户退出页面时,会显示一个警告框,说明对表单进行了多少更改。但是,它一直注册0。我已经测试过向inputChanges函数添加一个警报,告诉我发生了更改并触发警报,但是当我退出页面时,计数仍然注册为0 这是我的剧本: window.onload = function() { var totalChanges = ""; var inputHandles = 0; var selectHandles = 0; v
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?这可能没有什么帮助,因为您将该变量用于数值,而不是字符串。