2010-04-18 66 views
2

鉴于以下功能:排除一个DIV中点击从window.onbeforeunload

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'); 
    } 
}); 
+0

它是与生活,如果我更改绑定的问题消失。为什么? – AnApprentice 2010-04-18 18:31:39

回答

1

你可以这样做:

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

我改变你的ID是ignoreMe所以它是有效的,但你明白了吧:)您的问题来看,你可能想#ignoreMe a的选择,如果你想排除该div内的任何链接执行处理程序,只要使用该选择器即可。

+0

非常有趣......那么这段代码会在我有上面的代码之前或之后出现吗?除此之外呢?或者可以将这两组代码放在上面,并且以更智能,更清洁的方式进行组合? – AnApprentice 2010-04-18 06:09:55

+0

@nobosh - 是的,它应该是另外。没有更好的方法来组合它们,只需将这些代码放在一个'$(function(){});'所以它在'document.ready'上运行...之前/之后无关紧要,因为点击处理程序中的代码将不会运行,直到点击链接。 – 2010-04-18 11:14:15

+0

@nick,我试了一下代码,问题是现在window.onbeforeunload从来没有工作,后退按钮等不会触发提示警告用户未保存的更改。如果它是一个函数,我认为它很棒,这个函数扩展了粘贴在问题上的函数,但是里面有一个if语句,表示它是否被点击,忽略并继续?那有意义吗?有任何想法吗? – AnApprentice 2010-04-18 16:36:12

0

window.top.onbeforeunload这忽略了CKEDITOR的iFrame其做工作