Ajax jquery-do[x]在multiple.load之后
一旦三次装载完成Ajax jquery-do[x]在multiple.load之后,ajax,jquery,Ajax,Jquery,一旦三次装载完成 $("#sidebar a").live("click", function(e){ $(this).addClass("selected loading"); $("#conceptual").load(conceptualUrl, null, function(){ $(this).removeClass('loading').show("fast"); }); $("#development").load(developmentUrl, nul
$("#sidebar a").live("click", function(e){
$(this).addClass("selected loading");
$("#conceptual").load(conceptualUrl, null, function(){ $(this).removeClass('loading').show("fast"); });
$("#development").load(developmentUrl, null, function(){ $(this).removeClass('loading').show("fast"); });
$("#operational").load(operationalUrl, null, function(){ $(this).removeClass('loading').show("fast"); });
});
三次加载完成后,如何从链接中删除加载类
$("#sidebar a.loading").removeClass("loading");
谢谢 在开始加载之前,将全局变量设置为3;让每个回调函数将其递减1,然后检查是否为零-如果为零,则该回调函数将删除加载类。在开始加载之前,将全局变量设置为3;让每个回调函数将其递减1,然后检查它是否为零-如果为零,则该回调函数将删除加载类。快速而肮脏的方法是使用一个变量跟踪加载,该变量在每次运行一个函数时计数:
var to_be_loaded = 3;
var loaded_so_far = 0;
$("#sidebar a").live("click", function(e){
$(this).addClass("selected loading");
$("#conceptual").load(conceptualUrl, null, function(){ checkLoad(); $(this).removeClass('loading').show("fast"); });
$("#development").load(developmentUrl, null, function(){ checkLoad(); $(this).removeClass('loading').show("fast"); });
$("#operational").load(operationalUrl, null, function(){ checkLoad(); $(this).removeClass('loading').show("fast"); });
});
function checkLoad() {
loaded_so_far ++;
if(loaded_so_far == to_be_loaded) $("#sidebar a.loading").removeClass("loading");
}
$("#sidebar a").live("click", function(e){
var loadCount = 0;
$(this).addClass("selected loading");
$("#conceptual").load(conceptualUrl, null, function(){
loadCount++;
doSomething();
});
$("#development").load(developmentUrl, null, function(){
loadCount++;
doSomething();
});
$("#operational").load(operationalUrl, null, function(){
loadCount++;
doSomething();
});
function doSomething()
{
if (loadCount == 3)
{
$(this).removeClass('loading').show("fast");
}
}
});
一旦
loadCount
达到最大值,执行doSomething()
函数。快速而肮脏的方法是使用一个变量跟踪加载,该变量在每次运行其中一个函数时计数:
$("#sidebar a").live("click", function(e){
var loadCount = 0;
$(this).addClass("selected loading");
$("#conceptual").load(conceptualUrl, null, function(){
loadCount++;
doSomething();
});
$("#development").load(developmentUrl, null, function(){
loadCount++;
doSomething();
});
$("#operational").load(operationalUrl, null, function(){
loadCount++;
doSomething();
});
function doSomething()
{
if (loadCount == 3)
{
$(this).removeClass('loading').show("fast");
}
}
});
一旦loadCount
达到最大值,执行doSomething()
函数。尝试以下操作:
$("#sidebar a").live("click", function(e){
$(this).addClass("selected loading");
var num_loaded = 0;
var num_to_load = 3;
function show() {
num_loaded++;
if (num_loaded === num_to_load) {
$(this).removeClass('loading').show("fast");
}
}
$("#conceptual").load(conceptualUrl, null, show);
$("#development").load(developmentUrl, null, show);
$("#operational").load(operationalUrl, null, show);
});
show
功能通过闭包保持加载的num\u
和加载的num\u到的可见性。由于函数都是相同的,因此将匿名回调重新分解为单个命名函数也是有意义的。请尝试以下操作:
$("#sidebar a").live("click", function(e){
$(this).addClass("selected loading");
var num_loaded = 0;
var num_to_load = 3;
function show() {
num_loaded++;
if (num_loaded === num_to_load) {
$(this).removeClass('loading').show("fast");
}
}
$("#conceptual").load(conceptualUrl, null, show);
$("#development").load(developmentUrl, null, show);
$("#operational").load(operationalUrl, null, show);
});
show
功能通过闭包保持加载的num\u
和加载的num\u到的可见性。由于函数都是相同的,因此将匿名回调重新分解为一个命名函数也是有意义的。这是一个可以在整个站点中重用的有点奇特的功能。应该行得通
var Loader = function () {
var options = arguments[0];
this.actions = options.actions;
if (!this.actions || !this.actions.length) {
throw 'Loader: FATAL ERROR: Nothing to do. All your base are belong to us.';
}
this.onComplete = options.onComplete || function () {};
this.next();
}
Loader.prototype = {
next: function () {
if (this.actions.length) {
var action = this.actions.pop(), me = this;
$(action.selector).load(action.url, action.data, me.next);
} else {
this.onComplete();
}
}
}
var loaders = []; // or maybe asingle variable you overwrite every time, I don't know
$("#sidebar a").live("click", function(e){
$(this).addClass("selected loading");
loaders.push(new Loader({
actions: [
{selector: "#conceptual", url: conceptualUrl, data: null},
{selector: "#development", url: developmentUrl, data: null},
{selector: "#operational", url: operationalUrl, data: null}
],
onComplete: function () {
$("#sidebar a.loading").removeClass("loading");
}
}));
});
当然,您可以修改加载程序使其更强大;添加方法将新操作排队或删除当前正在运行的操作,可能会使其更通用。我的只是一个又快又脏的例子:)一些有点奇特的东西,你可以在整个网站上重复使用。应该行得通
var Loader = function () {
var options = arguments[0];
this.actions = options.actions;
if (!this.actions || !this.actions.length) {
throw 'Loader: FATAL ERROR: Nothing to do. All your base are belong to us.';
}
this.onComplete = options.onComplete || function () {};
this.next();
}
Loader.prototype = {
next: function () {
if (this.actions.length) {
var action = this.actions.pop(), me = this;
$(action.selector).load(action.url, action.data, me.next);
} else {
this.onComplete();
}
}
}
var loaders = []; // or maybe asingle variable you overwrite every time, I don't know
$("#sidebar a").live("click", function(e){
$(this).addClass("selected loading");
loaders.push(new Loader({
actions: [
{selector: "#conceptual", url: conceptualUrl, data: null},
{selector: "#development", url: developmentUrl, data: null},
{selector: "#operational", url: operationalUrl, data: null}
],
onComplete: function () {
$("#sidebar a.loading").removeClass("loading");
}
}));
});
当然,您可以修改加载程序使其更强大;添加方法将新操作排队或删除当前正在运行的操作,可能会使其更通用。我的只是一个又快又脏的例子:)只需使用jQuery.loadAll。。。哦,等等,它不存在?给你:
$("#sidebar a").live("click", function(e){
var side = $(this);
side.addClass("selected loading");
$.loadAll( {
$(conceptual): conceptualUrl,
$(development): developmentUrl,
$(operational): operationUrl
},
function() {
side.removeClass('loading').show("fast");
});
});
jQuery.fn.loadAll = function(urls, callback) {
var loaded = urls.length;
jQuery.each(urls, function(i, url) {
this.load(url, function() {
loaded--;
if(!loaded && callback)
callback();
});
});
};
只需使用jQuery.loadAll。。。哦,等等,它不存在?给你:
$("#sidebar a").live("click", function(e){
var side = $(this);
side.addClass("selected loading");
$.loadAll( {
$(conceptual): conceptualUrl,
$(development): developmentUrl,
$(operational): operationUrl
},
function() {
side.removeClass('loading').show("fast");
});
});
jQuery.fn.loadAll = function(urls, callback) {
var loaded = urls.length;
jQuery.each(urls, function(i, url) {
this.load(url, function() {
loaded--;
if(!loaded && callback)
callback();
});
});
};
我想你可能有问题。如果(doSomething==3)。我想你的意思是如果(loadCount==3)。但是,无论如何,神奇的数字3在条件中并不是最好的——最好给它起个名字,并在条件中使用它,例如,if(loadCount==maxLoad)
我想你可能有问题。如果(doSomething==3)。我想你的意思是如果(loadCount==3)。但是,无论如何,神奇数字3在条件中并不是最好的——最好给它起个名字,并在条件中使用它,例如,if(loadCount==maxLoad)
Good,我希望它能产生一些效果:)Good,我希望它能产生一些效果:)