Javascript работает только в Firebug - PullRequest
1 голос
/ 24 июля 2010

Я использую jQuery UI для создания вкладок на своей странице.Это работает хорошо, пока я не добавлю следующий фрагмент кода.

$(function () {
    $('#tabs').children("div").each(function (index) {
        $('#tabs').tabs('load', index);
    });
});

Я пытаюсь предварительно загрузить вкладки.Что интересно, если я запускаю это через Firebug и ставлю точку останова в этом куске кода и выполняю шаги, код работает отлично.В противном случае вкладки отображаются, а содержимое вкладок - нет.Эта проблема сводила меня с ума!Кто-нибудь может помочь?

Ответы [ 5 ]

1 голос
/ 19 февраля 2012

Была такая же проблема (динамическое содержимое работало, только когда я прошел через него в firebug).

Проблема заключалась в том, что я загружал содержимое XML, но не устанавливал свойство async.

МойКод изначально выглядел так:

var xmlDoc = createDocument();  //createDocument() was a cross browser solution for creating xml
xmlDoc.load("file.xml");

Изменение кода на:

var xmlDoc = createDocument();
xmlDoc.async = false;
xmlDoc.load("file.xml");

помогло мне.Спасибо!

1 голос
/ 18 января 2011

довольно простое решение - если у вас есть какие-либо console.log (ы) в вашем источнике, в Firefox это сломает ваше приложение, если Firebug выключен.1004 *

удалите все console.logs из вашего источника вручную лучше, используйте небольшую функцию-обертку toConsole, чтобы в вашем коде было только одно место, где у вас есть console.logтак что вы можете легко отключить его, когда закончите с отладкой:

toConsole: function( obj ) { console.log( obj ); }
1 голос
/ 24 июля 2010

Если вы посмотрите на источник пользовательского интерфейса 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() предлагает.

0 голосов
/ 24 июля 2010

Существуют ли какие-либо консольные функции, используемые в загружаемом удаленном контенте?Одно изменение, которое очевидно, когда Firebug включен, а когда нет, - это добавление всех этих функций console. * К глобальному объекту.Так, если у вас есть, например, оператор журнала:

console.log("hello")
alert("world");

, он будет предупреждать «мир» только если Firebug включен, в противном случае вызов console.log вызовет ошибку ReferenceError и ничего из последующегокод будет работать, в результате чего предупреждения не будут отображаться.

Еще одна возможность, которую я могу себе представить, связана с асинхронной загрузкой содержимого.Когда вы устанавливаете точки останова, это добавляет время к удаленному контенту, который загружается, пока вы ждете в точке останова.К тому времени, когда вы продвигаетесь вперед, этот контент потенциально загружается, и выполнение продолжается как обычно.Однако, когда нет точек останова, скрипт продолжит работу без остановок и может прерваться.Это, конечно, просто теория.

0 голосов
/ 24 июля 2010

Не уверен, но эта строка мне кажется проблемной:

$('#tabs').tabs('load', index);

Я полагаю, что у вас будет более одной вкладки, но вы используете идентификатор #tab, который следует использовать один раз для каждого элемента на странице.,Попробуйте вместо этого использовать класс для этих вкладок:

$('.tabs').tabs('load', index);
...