Если вы посмотрите на источник пользовательского интерфейса jQuery для вкладок, проблема проявляется довольно быстро, вот начало того, что происходит, когда вы вызываете эту load
функцию :
load: function(index) {
index = this._getIndex(index);
var self = this, o = this.options, a = this.anchors.eq(index)[0],
url = $.data(a, 'load.tabs');
this.abort(); //uh oh
Когда вы вызываете load
на вкладке, первое, что он делает, это уничтожает любые другие вкладки, выполняющие вызов AJAX . Поэтому, если вы посмотрите на свою страницу, она предварительно загружает вкладки, но только вкладку last , потому что в быстром цикле каждая вкладка убивает предыдущий AJAX-запрос.
Я думаю, вы захотите еще раз узнать, как вы это делаете в целом, поскольку модель AJAX предназначена для загрузки с якорей (элементы <div>
вообще не должны быть там). я не уверен точно как выглядит ваша разметка.
Тем не менее, у вас есть 2 варианта, вы можете загружать AJAX самостоятельно (лучше IMO), или использовать встроенный, но делать это последовательно, например так:
$("#tabs").tabs({
load: function(event, ui) {
if(ui.index != $("#tabs a").length - 1) //not on the last tab
$(this).tabs('load', ui.index + 1); //load the next tab
}
}).tabs('load', 0); //kick off the first
У меня нет подходящей среды для тестирования вышеперечисленного, но мы в основном используем load
событие , которое срабатывает, когда одна вкладка завершает загрузку, затем мы начинаем следующий (поэтому мы никогда не отменяем предыдущее в цикле). Это намного медленнее, поскольку мы выполняем последовательные, а не параллельные запросы ... вот почему для производительности я рекомендую вам .load()
вызывать себя вне чего-либо .tabs()
предлагает.