Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕获window.onbeforeunload_Javascript_Dom Events - Fatal编程技术网

Javascript 捕获window.onbeforeunload

Javascript 捕获window.onbeforeunload,javascript,dom-events,Javascript,Dom Events,我有一个表单,其中输入字段保存为onChange。在Firefox(5)中,即使窗口关闭,这也能起作用,但对于Chrome和IE,这不能起作用。我需要确保,即使他们在输入字段后试图关闭窗口,但没有发生onBlur事件(即,他们在文本框中键入了一些内容,但没有从文本框中弹出),我也在保存这些数据 我已经阅读了以下有关使用window.onbeforeunload的SO文章: 如果我使用以下选项: window.onbeforeunload = function() { return "o

我有一个表单,其中输入字段保存为
onChange
。在Firefox(5)中,即使窗口关闭,这也能起作用,但对于Chrome和IE,这不能起作用。我需要确保,即使他们在输入字段后试图关闭窗口,但没有发生
onBlur
事件(即,他们在文本框中键入了一些内容,但没有从文本框中弹出),我也在保存这些数据

我已经阅读了以下有关使用
window.onbeforeunload
的SO文章:

如果我使用以下选项:

window.onbeforeunload = function() {
    return "onbeforeunload";
}
然后我在中得到一个弹出窗口,其中
onbeforeunload

但如果我尝试:

window.onbeforeunload = function() {
    alert("onbeforeunload");
}
然后任何浏览器都不会发生任何事情,即使是Firefox

我想要实现的是:

window.onbeforeunload = function() {
    saveFormData();
}

如果有人能指出我可能出错的地方,我将不胜感激。

您必须在卸载之前从
返回

window.onbeforeunload = function() {
    saveFormData();
    return null;
}

function saveFormData() {
    console.log('saved');
}
更新

根据评论,alert似乎不再适用于新版本,其他任何东西都可以:)

自2011年5月25日起,HTML5规范规定,在此事件期间,可以忽略对
window.showModalDialog()
window.alert()
window.confirm()
、和
window.prompt()
方法的调用

还建议通过
addEventListener
界面使用此选项:

您可以而且应该通过
窗口.addEventListener()
卸载前事件处理此事件

更新后的代码现在如下所示:

window.addEventListener("beforeunload", function (e) {
  saveFormData();

  (e || window.event).returnValue = null;
  return null;
});

您不能在onbeforeunload中执行alert(),其他任何操作都可以

在用户离开页面时弹出消息以确认离开,您只需执行以下操作:

<script>
    window.onbeforeunload = function(e) {
      return 'Are you sure you want to leave this page?  You will lose any unsaved data.';
    };
</script>

window.onbeforeunload=函数(e){
return“您确定要离开此页面吗?您将丢失所有未保存的数据。”;
};
要调用函数,请执行以下操作:

<script>
    window.onbeforeunload = function(e) {
       callSomeFunction();
       return null;
    };
</script>

window.onbeforeunload=函数(e){
callSomeFunction();
返回null;
};

是的,上面每个人都这么说


对于您当前的情况,您可以使用onInput,而不是onChange,这是html5中的新功能。输入事件是相同的,但它会在每次击键时触发,而不考虑焦点。与onChange一样,它也适用于selects和其他所有选项。

关于如何使用此事件,似乎存在很多错误信息(即使在本页的上排答案中也是如此)

浏览器提供的
onbeforeunload
事件API有一个特定的用途:在此方法中,唯一值得做的事情是返回一个字符串,然后浏览器将提示用户在离开页面之前向他们指示应采取的操作。你不能阻止他们离开某个页面(想象一下,对于最终用户来说,这将是一场多么可怕的噩梦)

由于浏览器使用确认提示向用户显示从事件侦听器返回的字符串,因此您也不能在该方法中执行任何其他操作(如执行ajax请求)

在我编写的一个应用程序中,我想提示用户在离开页面之前让他们知道他们有未保存的更改。浏览器会向用户提示消息,之后,消息就不在我的控制范围之内,用户可以选择留下或离开,但此时您不再拥有对应用程序的控制权

我如何使用它的示例(伪代码):


如果(且仅当)应用程序有未保存的更改,则浏览器会提示用户忽略我的消息(无论如何都要离开页面)或不离开页面。如果他们选择离开页面,那就太糟糕了,你对此无能为力(也不应该无能为力)。

使用“alert()”时不会发生任何事情的原因可能正如MDN所解释的那样:“HTML规范声明,在此事件中,调用window.alert()、window.confirm()和window.prompt()方法的过程可能会被忽略。”

但还有另一个原因让您可能根本看不到警告,无论它是否调用alert(),在同一网站上也有解释:

“…浏览器可能不会显示在beforeunload事件处理程序中创建的提示,除非已与该页面交互”

这就是我在Chrome和FireFox当前版本中看到的。我打开使用以下代码设置的beforeunload处理程序的页面:

window.addEventListener
('beforeunload'
, function (evt)
  { evt.preventDefault();
    evt.returnValue = 'Hello';
    return "hello 2222"
  }
 );
如果我没有点击我的页面,也就是说“不要与之交互”,然后点击关闭按钮,窗口将在没有警告的情况下关闭

但是,如果我在试图关闭窗口或选项卡之前单击页面,我确实会收到警告,并且可以取消关闭窗口

因此,这些浏览器是“智能”(并且用户友好)的,因为如果你没有对页面做任何操作,它就不能有任何需要保存的用户输入,因此它们会在没有任何警告的情况下关闭窗口

请考虑,如果没有此功能,任何网站都可能会自私地问您:“您真的想离开我们的网站吗?”,而您已经明确表示要离开他们的网站

见:

我参加聚会似乎有点晚了,而且比起任何专业知识来,我更像是一个初学者;但这对我起了作用:

window.onbeforeunload=函数(){
返回false;
};

我将其作为内联脚本放在我的Head和Meta元素之后,如下所示:

window.addEventListener("beforeunload", function (e) {
  saveFormData();

  (e || window.event).returnValue = null;
  return null;
});

window.onbeforeunload=函数(){
返回false;
}
在我看来,本页似乎与发起人的要求高度相关(尤其是标题为
window.onunload
window.onbeforeuload
的部分):


希望这能有所帮助。

您提到的第一种方法是正确的。是的,onbeforeunload在IE和Firefox中工作,但在Chrome中不工作。我试图用新版本的Chrome、IE和Firefox来捕捉闭幕式。我只能用IE复制这个。所以看起来这已经不可能了?好吧,这在chrome上不起作用了,t