我試圖建立一個Javascript監聽器使用AJAX基於URL的錨加載內容的小頁面。在線看,我找到並修改了一個腳本,使用setInterval()
來做到這一點,迄今爲止它的工作正常。但是,我在$(document).ready()
中爲菜單和內容的特殊效果提供了其他jQuery元素。如果我使用setInterval()
,則不能使用其他jQuery效果。我finagled一種方式來獲得它通過在循環中的jQuery效果爲setInterval()
,像這樣的工作:的setInterval與其他jQuery的事件 - 太多的遞歸
$(document).ready(function() {
var pageScripts = function() {
pageEffects();
pageURL();
}
window.setInterval(pageScripts, 500);
});
var currentAnchor = null;
function pageEffects() {
// Popup Menus
$(".bannerMenu").hover(function() {
$(this).find("ul.bannerSubmenu").slideDown(300).show;
}, function() {
$(this).find("ul.bannerSubmenu").slideUp(400);
});
$(".panel").hover(function() {
$(this).find(".panelContent").fadeIn(200);
}, function() {
$(this).find(".panelContent").fadeOut(300);
});
// REL Links Control
$("a[rel='_blank']").click(function() {
this.target = "_blank";
});
$("a[rel='share']").click(function(event) {
var share_url = $(this).attr("href");
window.open(share_url, "Share", "width=768, height=450");
event.preventDefault();
});
}
function pageURL() {
if (currentAnchor != document.location.hash) {
currentAnchor = document.location.hash;
if (!currentAnchor) {
query = "section=home";
} else {
var splits = currentAnchor.substring(1).split("&");
var section = splits[0];
delete splits[0];
var params = splits.join("&");
var query = "section=" + section + params;
}
$.get("loader.php", query, function(data) {
$("#load").fadeIn("fast");
$("#content").fadeOut(100).html(data).fadeIn(500);
$("#load").fadeOut("fast");
});
}
}
也能正常工作一段時間,但在加載頁面的幾分鐘後,它拖動到近停止在IE和Firefox。我檢查了FF錯誤控制檯,並返回一個錯誤「太多的遞歸。」 Chrome瀏覽器似乎並不在意,儘管它已經打開了很多時間,但頁面仍能正常運行。
在我看來,pageEffects()
調用導致了遞歸問題,但是,任何試圖將其移出循環的嘗試都會中斷它們,並且只要setInterval
首次循環就會停止工作。
任何幫助,將不勝感激!
耶!即使我可以通過閱讀來告訴你,你有太多的遞歸...嘗試重構你的代碼... – Reigel 2010-07-12 07:42:21
有什麼特別的原因,爲什麼「REL鏈接控制」是this.target =「_blank」;而不是$(this).target =「_blank」;?有很多代碼似乎更好地支持,只需設置一次行爲,使用jQueryTimers插件和jQuery的代理模塊(橫幅子菜單隻需查找「ul.bannerSubmenu」一次,如果您將其存儲爲局部變量在代理對象中)> – Metalshark 2010-07-12 07:49:12