在 pageunload 上使用 devexpress 自定义确认弹出窗口
using a devexpress custom confirm popup on pageunload
所以我一直在尝试在页面卸载之前提示确认,但我不想要这个默认的 ok 取消浏览器确认弹出窗口,所以按照有关如何执行此操作的示例,我一直在尝试将其替换为没有成功的 Devexpress 弹出窗口或确认对话框,
我是 javascript 的新手,并没有真正理解导致问题的原因。
function confirmExit(data){
setTimeout(function (){
var result = DevExpress.ui.dialog.confirm("Are you sue","Confirm");
result.done(function (retVal){
if (retVal == true) {
return true;
}
else {
window.stop();
return false;
}
});
});
}
$(window).bind('beforeunload', confirmExit);
正常确认和 devexpress 弹出窗口或确认对话框之间的区别在于,后来 returns 一个承诺.. 但由于某些原因,上面的代码甚至没有阻止页面卸载。
任何指导和帮助将不胜感激。
坏消息,您正在寻找的东西无法通过 beforeunload 事件完成。我在下面向您展示了一个可行的代码。以下代码将显示浏览器的默认警报,其中包含消息“如果退出,现有更改将丢失”或类似内容。这是因为只有当您与页面交互然后想要退出时才会触发该事件。
window.addEventListener("beforeunload", (e) => {
//console.log(e)
let dialogText = "something";
e.returnValue = dialogText;
return dialogText;
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="text" />
<a href="./test.html">exit</a>
</body>
</html>
每种浏览器对此事件的处理方式略有不同,但总之。如果你最后不 return 它将不起作用。仅显示自定义消息是不可能的。您可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
更新
如果您希望在用户单击 link 时显示警告消息,您可以执行以下操作。创建一个按钮并将其样式设置为 link。将按钮绑定到将打开自定义模式的单击事件。并在模式的确认按钮中分配一个重定向到目标页面的点击事件。这是 bootstrap:
的示例
function exit(){
window.location.replace("")
}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Bootstrap CSS -->
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
crossorigin="anonymous"
/>
<title>Hello, world!</title>
</head>
<body>
<!-- Button trigger modal -->
<a
type="button"
class="fs-2"
title=""
data-bs-toggle="modal"
data-bs-target="#exampleModal"
>
Go to a third party page
</a>
<!-- Modal -->
<div
class="modal fade"
id="exampleModal"
tabindex="-1"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Personalized Message</h5>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">Are you sure","Confirm</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-secondary"
data-bs-dismiss="modal"
>
Close
</button>
<button type="button" class="btn btn-primary" onclick="exit()">Confirm and Exit</button>
</div>
</div>
</div>
</div>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: Bootstrap Bundle with Popper -->
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"
></script>
<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
-->
</body>
</html>
这是一个基本的想法。您可以创建代码来对您网站上的所有 link 执行此操作,也可以只对一个
执行此操作。
所以我一直在尝试在页面卸载之前提示确认,但我不想要这个默认的 ok 取消浏览器确认弹出窗口,所以按照有关如何执行此操作的示例,我一直在尝试将其替换为没有成功的 Devexpress 弹出窗口或确认对话框, 我是 javascript 的新手,并没有真正理解导致问题的原因。
function confirmExit(data){
setTimeout(function (){
var result = DevExpress.ui.dialog.confirm("Are you sue","Confirm");
result.done(function (retVal){
if (retVal == true) {
return true;
}
else {
window.stop();
return false;
}
});
});
}
$(window).bind('beforeunload', confirmExit);
正常确认和 devexpress 弹出窗口或确认对话框之间的区别在于,后来 returns 一个承诺.. 但由于某些原因,上面的代码甚至没有阻止页面卸载。
任何指导和帮助将不胜感激。
坏消息,您正在寻找的东西无法通过 beforeunload 事件完成。我在下面向您展示了一个可行的代码。以下代码将显示浏览器的默认警报,其中包含消息“如果退出,现有更改将丢失”或类似内容。这是因为只有当您与页面交互然后想要退出时才会触发该事件。
window.addEventListener("beforeunload", (e) => {
//console.log(e)
let dialogText = "something";
e.returnValue = dialogText;
return dialogText;
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="text" />
<a href="./test.html">exit</a>
</body>
</html>
每种浏览器对此事件的处理方式略有不同,但总之。如果你最后不 return 它将不起作用。仅显示自定义消息是不可能的。您可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
更新
如果您希望在用户单击 link 时显示警告消息,您可以执行以下操作。创建一个按钮并将其样式设置为 link。将按钮绑定到将打开自定义模式的单击事件。并在模式的确认按钮中分配一个重定向到目标页面的点击事件。这是 bootstrap:
的示例 function exit(){
window.location.replace("")
}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Bootstrap CSS -->
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
crossorigin="anonymous"
/>
<title>Hello, world!</title>
</head>
<body>
<!-- Button trigger modal -->
<a
type="button"
class="fs-2"
title=""
data-bs-toggle="modal"
data-bs-target="#exampleModal"
>
Go to a third party page
</a>
<!-- Modal -->
<div
class="modal fade"
id="exampleModal"
tabindex="-1"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Personalized Message</h5>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">Are you sure","Confirm</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-secondary"
data-bs-dismiss="modal"
>
Close
</button>
<button type="button" class="btn btn-primary" onclick="exit()">Confirm and Exit</button>
</div>
</div>
</div>
</div>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: Bootstrap Bundle with Popper -->
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"
></script>
<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
-->
</body>
</html>
这是一个基本的想法。您可以创建代码来对您网站上的所有 link 执行此操作,也可以只对一个
执行此操作。