如果他们在文本框中输入了某些内容,我想在浏览器的刷新或按下按钮时警告用户。所以我使用了window.onbeforeunload函数来完成它。
window.onbeforeunload = function () {
if (if user hasn't entered any thing) {
return;
}
return 'Entered data will be lost.';
};
这个javascript代码在Firefox和Chrome中运行良好。但在IE中,此功能会触发部分回发的按钮。 在IE中克服这个问题的任何解决方案? 谢谢:))
答案 0 :(得分:5)
window.onbeforeunload函数无法在IE中正确执行。因为一些部分回发也被认为是“试图离开页面”。 如果页面上的链接有href =“javascript:....”(ASP.Net LinkButton像这样呈现),IE将在单击链接时错误地触发窗口卸载事件。 所以,我保留了一个dirtyflag变量并添加了
var __ignoreDirtyFlag = false;
$(document).ready(function () {
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function () {
__ignoreDirtyFlag = true;
});
}
});
现在加载页面时,对于以href ^ =“javascript:”开头的链接,将分配该功能。当单击链接时,它会使__ingoreDirtyFlag变量为true; 然后添加
window.onbeforeunload = function globalWindowUnload() {
if (!__ignoreDirtyFlag && isDataFilled == true) {
return "You have unsaved changes on this page. If you leave this page, those changes will be lost.";
}
__ignoreDirtyFlag = false;
return;
};
如果您在页面中使用了任何asp更新面板,则上面的功能绑定将被删除。 因此,当更新面板刷新时,我们必须再次将函数绑定到链接。
所以,
function foo() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
}
function endRequestHandler(sender, args) {
// Do your stuff
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function () {
__ignoreDirtyFlag = true;
});
}
}
和
对于body标签onload方法,我给出了foo()方法。
<body onload="foo()">
这个hack在IE和所有浏览器上运行良好:) 感谢
答案 1 :(得分:0)
`var inFormOrLink = false; var url_auth =''; var __ignoreDirtyFlag = false;
public static async Task<Try<T>> FirstOrBad<T>(this IEnumerable<Task<Try<T>>> tasks, Func<Try<T>, bool> predicate)
{
var taskList = tasks.ToList();
var completed = new List<Task<Try<T>>>();
Task<Try<T>> completedTask;
do
{
completedTask = await Task.WhenAny(taskList);
completed.Add(completedTask);
taskList.Remove(completedTask);
} while (!predicate(await completedTask) && taskList.Any());
return !predicate(await completedTask) ? new Try<T>(completed.ToString(",")) : await completedTask;
}
答案 2 :(得分:0)
目的是在用户关闭浏览器或手动更改目标网址时注销用户
var url_auth = '';var __ignoreDirtyFlag = false;$(document).ready(function () {if ($.browser.msie) {$('a').live('click', function () { __ignoreDirtyFlag = true;}); $('*').bind('submit', function () { __ignoreDirtyFlag = true; });window.onbeforeunload = function () {if (!__ignoreDirtyFlag) {if (window.location.href.indexOf("DEV2") != -1) {$.post("/DEV2/SSQ/AUTH/LOGOUT", null);return 'Tem certeza que deseja encerrar a sessão ?';}}};