Ajax .load()在初始触发时无法工作
Ajax .load() won't work when triggered initially
所以我有一个简单的选项卡系统,我用。load函数来加载所需的内容。问题是包含这个选项卡系统的页面本身是ajax加载的内容。由于某些原因,初始调用tab函数来显示初始选项卡内容将无法工作。但在手动选择一个选项卡后,load函数会正确加载内容。
有一些代码要看:
选项卡处理程序:
function loadTab(tab) {
$(".tab_a:eq("+otab+")").removeClass("tab_slc");
$('#tab_content').hide();
$('#tab_content').load("include/tab_downloadVersions.html .tab:eq("+tab+")");
$(".tab_a:eq("+tab+")").addClass("tab_slc");
$('#tab_content').fadeIn(function() {});
otab = tab;
}
在的末尾,我调用loadTab(tab);
,这个东西应该被初始化。但由于某些原因,内容仍然是空的。只要你手动点击一个选项卡(我有一个点击函数调用loadTab(tab)
一切开始工作)
因为代码本身工作,我认为问题是由处理页面本身的其他脚本引起的。它也是一个加载页面的。load函数,加载这个选项卡系统。
那么多个。load不喜欢彼此吗?如果是这样,我能改变什么?提前感谢;)
编辑:由于某些原因,我不能发布完整的代码,但是如果你去这里,你可以看到所有脚本的网站运行:n.ethz.ch/学生/lukal/paint.net标签系统在下载页面。
编辑 :-----------------------------------------------------------------------------------------------------------------------------大更新
所以这仍然是相同的问题,但略有不同:我做了评论中建议的事情,并将我的第二个.load()调用放在第一个成功调用的内部。
$("#content").load("pages/contact #contentInside", function() {
$("#OtherContent").load("include/info #OtherContentInside");
});
这行得通。
但是现在我有了一个伟大的想法,那就是创建一个巨大的load函数。这是一个比普通加载稍微好一点的函数,因为它会有一些褪色之类的。但现在我有同样的问题,但更复杂。我创建了加载函数作为一个"插件",所以函数本身是在一个不同的脚本文件,因此我不能访问成功函数的内部。我用return $.ajax();
和。done()调用解决了这个问题。这里的问题是,有一些罕见的情况下,它只是跳过二次加载函数。因此,我正在寻找一种有保证的方法来控制.load调用的顺序。任何想法?
模型网站是最新的新脚本,如果你想看看。人们在抱怨我的链接可能会传播病毒。由于某些原因,我不能发布很长的代码片段,所以这个网站是我展示一切的最佳来源。如果你知道一个更可靠的方式来分享我的代码,请告诉我。
我们无法看到代码的其余部分来判断初始调用是从哪里调用的。像下面这样的设置应该可以工作:
$(function() {
var tab = 0;
loadTab( tab );
});
function loadTab(tab) {
//WHAT IS otab???
$(".tab_a:eq("+otab+")").removeClass("tab_slc"); //<<<==== otab
$('#tab_content').hide();
$('#tab_content').load("include/tab_downloadVersions.html .tab:eq("+tab+")");
$(".tab_a:eq("+tab+")").addClass("tab_slc");
$('#tab_content').fadeIn(function() {});
otab = tab;
}
它最初不工作的原因是因为otab
在函数第一次调用时没有定义。您在函数末尾初始化了otab,但在函数开头使用它
更新2
我有机会看看你的代码,我刚刚发现了问题所在:
- 你没有准备好DOM
- 您没有在页面加载时调用函数。
下面的代码版本应该可以工作——尽量不要像使用otab
那样使用全局变量。由于您是在页面的末尾加载这个脚本(并且您正在使用事件委托),因此您可能已经准备好了DOM。如下所示添加.trigger('click')
或click()
应该可以解决这个问题。
//Tab-loader
//Haeri Studios
var tab = 0;
var otab = tab;
var counter = 0;
//click detect
$(document).on('click', '.tab_a', function() {
tab = counter == 0 ? tab : ($(this).attr('id'));
loadTab(tab);
counter++;
return false;
})
.trigger('click'); //<<<<<===== This will call the function when the page loads
//Tab setup
function loadTab(tab) {
//Content Setup
$(".tab_a:eq("+otab+")").removeClass("tab_slc");
$('#tab_content').hide();
$('#tab_content').load("include/tab_downloadVersions.html .tab:eq("+tab+")");
$(".tab_a:eq("+tab+")").addClass("tab_slc");
$('#tab_content').fadeIn(function() {});
otab = tab;
}
//Initialize << WHAT ARE YOUR INTENTIONS HERE .. DO YOU REALLY NEED THIS PIECE?
$.ajax({success: function() {
loadTab(tab);
}});
这个问题的部分答案是在页面加载函数的成功调用中调用loadTab函数,就像charlietfl指出的那样。但问题是,没有必要在每次调用新页面时都调用表加载器。所以我不希望在每个页面设置函数中都有一个罕见的调用。
我对stackoverflow的系统有点失望。似乎如果你没有很高的声誉水平,没有人会给你的问题一个"S"。好吧,但至少有人提出了一些意见,对此我非常感激。因此,通过深入研究谷歌,我发现回调可以手动放置在函数的任何地方。
如果我们有一个函数:
foo(lol, function() {
//This after
});
this在foo()完成后执行操作。但是,如果我们在foo()中有另一个函数,我们也需要等待:
function foo(lol) {
bar(troll, function() {
//This first
});
}
bar函数与foo的成功调用无关。这会导致不可预测的调用结果。
技巧在于控制何时调用foo的成功函数。如果我们在foo中添加一个参数(callback),并在bar的成功调用中调用这个"参数"(callback();),我们可以确保顺序得到保证。
就是这样:
function foo(lol, callback) {
bar(troll, function() {
//This first
callback(); //<-This callback placement defines when it should be triggered
});
}
foo(lol, function() {
//This after
});
我们得到:
//this first
//this after
- .load ajax无法正常工作whitin wordpress主题
- 动态潜水高度jQuery.Load()不工作
- Ajax load在chrome中不起作用,而在Fire fox中工作
- 为什么onload=“;函数“;工作,而jquery.load不工作;t
- jQuery.load随机工作,绝望
- Jquery 和 JS 在 DOM 上工作,而不是在 load
- 在 .detach() 和 .append() 之后使用 .load() 无法按预期工作
- 如何在没有window.location.reload()的情况下使JavaScript .load工作
- jquery .load() 函数仅在第一次工作
- 当我将变量附加到 URL 时,如何使 .load 工作
- 刷新页面时使用chrome缓存的图像.load()工作不正常
- 为什么不'第二次和第三次调用后,t ajax load()工作
- jQuery.load()是如何工作的
- load()由一个不工作的按钮触发
- jQuery.load()无法在jQueryload()加载的另一个内容中工作
- Ajax .load()在初始触发时无法工作
- 试图获得一个AJAX风格的.load()元素与.on()绑定,但它不工作
- jQuery .on('load')没有按预期工作
- Jquery load()只在firefox中工作
- Javascript stoppropagation不能与ajax .load一起工作