3

我正在使用具有 DNS 记录管理器的 Web 托管面板。我必须使用大量的 JavaScript 才能使它几乎像桌面应用程序一样运行。

我真的很想在浏览器运行时显示一个自定义对话框窗口beforeunload但是经过一些研究我发现我被卡在使用浏览器默认对话框窗口。

所以下面的这段 JavaScript 代码就是这样做的,我的问题是我需要确保它不会在某些链接点击时被触发。

我希望能够维护一个 CSS 类名数组,如果点击的链接在这个数组中,那么它不会显示 onunload 事件。

我确信这对于 JavaScript 开发人员来说很容易。有人可以告诉我怎么做吗?

//sample Class array
safeLinks = ['test', 'test2', 'test3', 'test4', 'test5'];

// onunload event
$(window).on('beforeunload', function(){
  return 'Are you sure you want to leave?';
});
4

2 回答 2

2

您可以在单击事件处理程序时删除它们:

var safeLinks = ['.test', '.test2', '.test3', '.test4', '.test5'];

function promptBeforeClose() {
    return 'Are you sure you want to leave?';
}

$(window).on('beforeunload', promptBeforeClose);

$(document).on('click', safeLinks.join(', '), function(e) {
    $(window).off('beforeunload', promptBeforeClose);
});

此外,如果这些安全链接有一个共同的祖先,请使用它而不是document作为委托父级,否则人们会抱怨。;)

于 2013-04-20T03:41:28.717 回答
1

使用标志变量。当点击 onload 然后将其设置为 true

$(window).on('beforeunload', function(){
 if(flag != false)
  return 'Are you sure you want to leave?';
});
于 2013-04-20T03:31:19.610 回答