【问题标题】:Excluding clicks within a DIV from a window.onbeforeunload从 window.onbeforeunload 中排除 DIV 内的点击
【发布时间】:2010-04-18 02:35:50
【问题描述】:

给定以下函数:

window.onbeforeunload= function() {
    if (CKEDITOR.instances.stuff.getData().length > 0 && oktoquit == false) {
        return "You have unsaved changes. Click Cancel now, then 'Save' to save them. Click OK now to discard them.";
    }
};

如果用户单击带有 ID 的 div 中的链接,我想要一种方法来排除此函数的运行:

<div id="ignore me"><a href="">blah</a><a href="">blah</a><a href="">blah</a></div>

有什么想法吗?

** 更新 事实证明,该网站搜索的以下代码导致了该问题。但为什么呢?

$("#searchresults li").live('click', function(e) {
    if (e.target.nodeName != "a") {
        window.location = $(this).find('a').attr('href');
    }
});

【问题讨论】:

  • 它与实时有关,如果我将其更改为绑定问题就消失了。为什么?

标签: javascript jquery window onbeforeunload


【解决方案1】:

你可以这样做:

$("#ignoreMe").click(function() {
  window.onbeforeunload = null;
});

我将您的 ID 更改为 ignoreMe,所以它是有效的,但您明白了 :) 从您的问题来看,如果您想排除该 div 内的任何链接执行,您可能需要 #ignoreMe a 作为选择器处理程序,无论你想要什么,都使用那个选择器。

【讨论】:

  • 非常有趣......那么这段代码会在我上面的代码之前还是之后?另外的意思?或者可以将上面的 2 组代码和你的代码一起挖掘,并以更智能、更清洁的方式结合起来吗?
  • @nobosh - 是的,它应该是另外的。没有更好的组合它们的方法,只需将此代码放在$(function() { }); 中,以便它在document.ready 上运行...之前/之后无关紧要,因为点击处理程序中的代码不会运行直到点击链接。
  • @nick,我尝试了代码,现在的问题是 window.onbeforeunload 永远无法工作,后退按钮等不会触发提示以警告用户未保存的更改。我认为如果它是一个函数,一个函数扩展了粘贴在问题中的内容,那就太好了,但是里面有一个 if 语句,说如果它被点击,忽略并继续?那有意义吗?有什么想法吗?
  • @nobosh - 听起来你在某处有一个 javascript 语法错误导致无法正常工作,使用 FireBug 或 Chrome 的控制台查看错误是什么,修复应该可以解决问题。您可以存储一个变量,但我相信将处理程序设置为 null 更简单,而且代码也更少。
  • 我认为问题在于,虽然点击 #ignoreMe div 会导致错误,但当我使用 JS 报告点击的内容时,它会考虑整个页面吗?
【解决方案2】:

window.top.onbeforeunload 这会忽略完成这项工作的 CKEDITOR iFrame

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2021-04-08
    • 2015-12-19
    相关资源
    最近更新 更多