您好我有一个页面,它呈现来自AJAX请求的大量令牌。这是呈现内容的方法:
function renderTextView(documentId, manuscriptId) {
$("#textView").empty();
$(".token-display a").die();
$.each(window.g_cacheAllTokens, function(idx, token) {
var html = renderToken(token, documentId, manuscriptId);
$("#textView").append( html );
});
$(".token-display a").live('click', function() {
var url = $(this).attr('href');
$.fn.colorbox({
opacity: 0.25,
href: url,
open: true,
onClosed: function() {
reloadViews(documentId, manuscriptId);
}
}); // colorbox
return false;
});
// enable tooltips for tokens
if( true == getEditorOption('showTooltips') ) {
$(".token-display").tooltip();
}
} // renderTextView
对于每个呈现的标记,我设置了一个在“click”上打开颜色框的实时处理程序。在Chrome中它似乎表现得很好,但在Firefox中。一旦我打开一个颜色框然后关闭它,第二次打开它(屏幕中相同的一个或任何其他标记)它请求目标URL两次,如果我这样做三次,那么它确实执行了三次请求等等。
正如您可以看到颜色框关闭时,我重新加载视图,因此我获得了新的标记并刷新了处理程序。
这使我的应用程序在使用一段时间后无法使用,所以这是一个非常糟糕的问题。
我不知道它可能是什么,我甚至不知道如何调试它。
答案 0 :(得分:2)
我还注意到,如果Colorbox内部显示的页面还包含Colorbox的JavaScript,则会发生这种情况。这至少是我的问题。无论您在Colorbox中加载哪个页面,都不得包含重复的JavaScript。
希望这可以帮助那些遇到类似问题的人。
答案 1 :(得分:0)
如果有人遇到类似的问题,我设法通过将点击处理程序从动态变为静态来解决它,如下所示:
$(".token-display a").click(function() {
// ...handler code...
});
而不是我以前的:
$(".token-display a").live('click', function() {
// ...handler code...
});
似乎Firefox出于某种原因两次添加处理程序。