关于关闭的窗口时的数据比较

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次的数据不一样。
阅读 2.5k
2 个回答

alert(1)控制台会报错(有木有大神讲解下原因,为什么不能被阻塞掉)
clipboard.png

beforeunload默认会有一个弹出框,要显示必须有一些设置:
IE和FireFox下:将event.returnValue的值设为要显示的字符串
Chrome和Safari下:作为函数的返回值,即return '要显示的字符串';

但Firefox(版本39.0)下显示都是一样的

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题