繁体   English   中英

Javascript仅在Firebug中有效

[英]Javascript only working in Firebug

我正在使用jQuery UI在页面上构建选项卡。 在添加以下代码之前,该方法效果很好。

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

我正在尝试预加载标签。 有趣的是,如果我通过Firebug运行此程序并将断点放在那段代码中并逐步执行,则代码可以完美运行。 否则,将渲染选项卡,但不会显示选项卡中的内容。 这个问题使我发疯! 有人可以帮忙吗?

如果您查看jQuery UI源中的选项卡,问题会很快显示出来, 这就是调用该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调用的选项卡 因此,如果您查看页面,它会预加载选项卡,但仅预加载最后一个选项卡,因为在快速循环中,每个选项卡都会杀死前一个选项卡的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()提供。

非常简单的解决方案-如果您的源代码中包含任何console.log,则在Firefox中,如果Firebug关闭,则会破坏您的应用程序。

您可以做两件事:

  1. 手动从您的源中删除所有console.logs
  2. 更好的是,使用一点toConsole包装函数,以便在代码中只有一个位置拥有console.log,因此在调试完成后可以轻松将其关闭:

toConsole: function( obj ) { console.log( obj ); }

遇到相同的问题(动态内容仅在Firebug中逐步运行时有效)。

问题是我正在加载xml内容,但未设置async属性。

我的代码最初看起来像:

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

将代码更改为:

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

为我做了把戏。 谢谢!

不确定,但是这行对我来说很成问题:

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

我相信您将有多个标签,但您使用的是ID #tab ,每页每个元素应使用一次。 尝试为这些选项卡使用类:

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

加载的远程内容中是否正在使用任何控制台功能? 启用Firebug与不启用Firebug时,显而易见的一项更改是,将所有这些console。*函数添加到了全局对象中。 因此,例如,如果您有一条日志语句:

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

如果启用了Firebug,这只会警告“世界”,否则调用console.log将引发ReferenceError错误,并且随后的任何代码都不会运行,因此不会显示任何警告。

我可以想象到的另一种可能性与内容的异步加载有关。 设置断点时,它会在您等待断点时为正在加载的远程内容增加时间。 在您前进时,内容可能已加载,并且执行正常进行。 但是,当没有断点时,脚本将继续执行而不会停止,并且可能会中断。 当然,这仅仅是一个理论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM