gpt4 book ai didi

Javascript,控制 onbeforeunload 标签

转载 作者:太空宇宙 更新时间:2023-11-04 15:39:51 26 4
gpt4 key购买 nike

我正在尝试设置一个 onbeforeunload 标记,以阻止用户离开特定页面,当且仅当他们有未保存的内容时,并且仅在特定页面上(我们使用的是单个母版页)。我很快发现在 onbeforeunload 标记中返回 ##anything## 总是会触发 javascript 确认,并将 ##anything## 放入弹出窗口中。显然,这是现在预期的行为,但它确实使我无法使用我自己的可以用 if 语句控制的确认框。

我试过了,没用:

<body class="yui-skin-sam" onbeforeunload="document.onFormClose();">

<script>
document.onFormClose = function () {
if (document.getElementById('DirtyFlag').value == "true") {
document.getElementById('DirtyFlag').value == "false";
return 'You will lose all changes made since your last save';
}
}
</script>

其中 DirtyFlag 是一个隐藏字段,如果存在任何未保存的更改,该字段变为真。我希望将 return 放在函数中就可以解决问题,但没有这样的运气。

所以我的问题是,有没有一种方法可以使用带有内置返回值的 onbeforeunload 标记,从而绕过它等待该字段的值?或者,(虽然这不太理想)我想我可以在我设置或重置 getElementById 标签的所有地方动态添加或删除 onbeforeunload 标签。不幸的是,我也不知道该怎么做。哦,我完全不能使用 jQuery 或任何其他 javascript 库。

最佳答案

不确定这是否符合设计,但如果您从事件处理程序返回 null,您可能会得到您想要的结果:

window.onbeforeunload = function() {
var el = document.getElementById("dirtyFlag");
if (el.value === "true") {
return 'You will lose all changes made since your last save';

}
else {
return null;
}
};

FF 中的以下作品:http://jsfiddle.net/andrewwhitaker/chZJ8/ .尝试将隐藏的 input 值更改为“true”,您应该会开始收到确认对话框。 但是,我无法让它在 Chrome 中运行,也无法在 IE 中进行测试。如果有人可以确认这在这些浏览器中的任何一个中都有效,那就太好了。

编辑:添加另一个在 Chrome 中更易于使用和工作的示例(JSFiddle 中的 iFrame 导致了问题)。在此处查看示例:http://andrewawhitaker.com/examples/onbeforeunload_test.html .在输入中键入“true”以查看确认。如果“true”不是输入值,则不显示对话框。在 FF 和 Chrome 中工作,仍然不能保证 IE。

更新 2: 执行此操作的更可靠方法可能是在以编程方式设置 dirtyFlag 的值时添加和删除事件监听器,只需删除或添加适当的事件处理程序:

var isDirty = function() { ... };
if (/* form is dirty*/) {
window.onbeforeunload = isDirty;
}
else {
window.onbeforeunload = null;
}

关于Javascript,控制 onbeforeunload 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520819/

26 4 0