var checkValue={};
checkValue.arr1=[];
checkValue.arr2=[];
function check(arr){
var inputs=document.getElementsByTagName('input');
var textArea=document.getElementsByTagName('textarea');
for(var i= 0;i<inputs.length;i++){
if(inputs[i].type==='text'){arr.push(inputs[i].value)}
if(inputs[i].type==='radio' || inputs[i].type==='checkbox'){arr.push(inputs[i].checked)}
}
for(var i=0;i<textArea.length;i++){
arr.push(textArea[i].innerHTML);
}
}
//页面加载完毕,先获得所有表单数据值并储存在checkValue.arr1。
window.onload= function () {
check(checkValue.arr1);
};
//页面离开时,获得所有表单数据值并储存在checkValue.arr2。再进行数据比较,判断是否修改了数据
window.onbeforeunload = function () {
alert(1);
check(checkValue.arr2);
console.log(checkValue.arr2)
if (checkValue.arr1.toString()!== checkValue.arr2.toString()) {
return "changed"
}
};
问题1.为什么window.onbeforeunload里面的 alert(1);不能执行
问题2 为什么改了textarea里面的数据之后,不弹窗,明明2次的数据不一样。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
alert会被ignore, 这是标准规定的: https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload
alert(1)
控制台会报错(有木有大神讲解下原因,为什么不能被阻塞掉)beforeunload
默认会有一个弹出框,要显示必须有一些设置:IE和FireFox下:将
event.returnValue
的值设为要显示的字符串Chrome和Safari下:作为函数的返回值,即return '要显示的字符串';
但Firefox(版本39.0)下显示都是一样的