window.onbeforeunload 引用上面那段函数,结果刷新页面,关闭页面,都不会调用了?

function onbeforeunload_handler(content_id) {
var editor = CKEDITOR.instances.editor1;
var new_or_old_value = getQueryString("new_or_old");
var title = document.getElementById("title").val();
var describe = document.getElementById("describe").val();
var type = document.getElementById("type").val();
var stemTxt=CKEDITOR.instances.editor1.document.getBody().getText();
editor.focus();
editor.document.$.body.style.cssText = "background-color:#ff9";
if(new_or_old_value=="true"){
ajax("http://localhost:8080/MyBlog/makedraft.action?title="+title+"&describe="+describe+"&type="+type+"&stemTxt="+stemTxt+"&new_or_old_value=true&content_id=-1",
function(str) {
editor.innerHTML = "";
});
}
if(new_or_old_value == "flase"){
var content_id_value = getQueryString("content_id");
ajax("http://localhost:8080/MyBlog/makedraft.action?title="+title+"&describe="+describe+"&type="+type+"&stemTxt="+stemTxt+"&new_or_old_value=false&content_id="+content_id_value,
function(str) {
editor.innerHTML = "";
}); }
return "自动把你写的文字保存为草稿,确定离开了吗?";
}

window.onbeforeunload 引用上面那段函数,结果刷新页面,关闭页面,都不会调用了,我一开始没有加上
var title = document.getElementById("title").val();
var describe = document.getElementById("describe").val();
var type = document.getElementById("type").val();
这三个变量的时候,是可以的,加上去就不可以了,怎么回事呢?

任何阻止用户关闭浏览器的行为都不被执行

其实我比较好奇你是如何指定window.onbeforeunload的
因为你写的这个方法是有参数的,并且你的函数内部也使用了参数。
所以你要是写成window.onbeforeunload = onbeforeunload_handler;
这样这个参数在函数内部就是一个event对象(这好像和你的逻辑不太对),但是事实上你内部代码的确没有用到这个参数。。
如果你写成window.onbeforeunload = onbeforeunload_handler(xxx);
那更是错误的,因为这样会将该函数的执行结果(一串字符串)返回回来。
所以先当你是第一种写法。
然后你不加那三句话,为什么成功了呢?因为你没有语法错误,自然成功了。
加上3句话怎么就失败了呢?因为这三句话前面是DOM的对象,而val()我记得没错应该是jquery的方法。
所以会报错。。。
然后我对于你设置了content_id参数,而函数内部完全没有使用的做法,表示深深的疑惑

这时浏览器兼容性的问题