【问题标题】:jQuery and Text File Errors with FirefoxFirefox 的 jQuery 和文本文件错误
【发布时间】:2011-08-03 22:54:52
【问题描述】:

对于可能令人困惑的标题,我深表歉意,但我不太确定如何标记此线程。无论如何,我正在开发一个在 IE 中运行良好的 Web 应用程序,但由于某种原因在 Firefox 中似乎失败了。我知道一开始很多应用程序都会出现这种情况,但是 Firefox 开发控制台给我的错误并没有多大意义。以下是它出现的错误:

$("#workNews").text(lines[i++]).hide is not a function
syntax error
data.split is not a function

第一个错误是声称以下代码行中断,因为它认为 jQuery.hide() 不是函数。

$("#workNews").text(lines[i++]).hide().fadeIn(500).delay(4000).fadeOut(500);

现在,这行代码之前在 IE 和 Firefox 中都可以使用,但是突然坏掉了。与第三个错误相同,因为它认为通过分隔符拆分字符串的“split()”方法不是函数。再一次,这条线以前工作过,现在突然不行了。 “语法错误”真的很奇怪......我正在使用“$ .get()”方法从文本文件中打开和读取行,该方法运行良好,并且在 IE 中仍然有效。但是,Firefox 开发者控制台告诉我存在语法错误并继续指向文件中的一行文本。

我不确定是否有一个简单的事情需要在我的代码中的其他地方修复,而这些错误并不明显,但是当遇到这样的问题时,我想知道是否有任何“通常的原因”发生。如果您需要查看我的更多代码,只需询问即可。谢谢。

编辑#1:为了安全起见,这里是所有三个“错误”都应该发生的整个函数。同样,直到最近,此功能在 IE 和 Firefox 中都运行良好。

function GetWorkNews() {
    var lines = new Array(); var i = 0;
    $.get(textFile, function(data) {
        lines = data.split("\n");
    });

    $("#workNews").text(lines[i++]).hide().fadeIn(500).delay(4000).fadeOut(500);
    setInterval(function() {
        $("#workNews").text(lines[i++]).hide().fadeIn(500).delay(4000).fadeOut(500);

        if(i == lines.length) {
            i = 0;
        }
    }, 5000);
}

编辑 #2:当我在修补时,我注释掉了我调用 hide() 函数的第一行 jQuery: $(#workNews").text(lines[i++]).hide().fadeIn(500).delay(4000).fadeOut(500); 现在一切似乎都正常了,尽管 FF 开发控制台仍然告诉我我的文本文件中存在语法错误。我想我不需要“需要”我注释掉的这一行,因为它只是用文本为我的横幅做准备,这样它就不必等待五秒钟来显示第一个标题,但我仍然喜欢它.任何想法为什么该行中断,但 setInterval() 函数中的行不完全相同?

【问题讨论】:

  • 你能确认 jquery 是在 FF 中加载的吗?
  • 看来split()函数是罪魁祸首。在字符串以外的任何内容上使用split() 将引发split is not a function 错误。你检查过数据的有效性吗?
  • 我知道除了 GetWorkNews() 之外,我还有大约六个使用 jQuery 的函数,所有这些函数在 IE 和 FF 中都可以正常工作,所以我认为它已正确加载。我仔细检查了 AJAX GET 调用返回的数据,它实际上是一个由换行符分隔的大字符串。我还尝试用我以前工作过的相对路径字符串替换“textFile”变量名。还是什么都没有……
  • 如果我使用 $.html() 而不是 $.text,$.hide() 会起作用吗?如果是这样,那可能会修复错误吗?

标签: jquery firefox text split hide


【解决方案1】:

作为回顾,我找到了两种可能的解决方案。第一个也是不太理想的方法是删除启动代码行。第二个是分解问题行的函数调用,以便:

$("#workNews").text(lines[i++]).hide().fadeIn(500).delay(4000).fadeOut(500);

变成这样:

$("#workNews").text(lines[i++]);
$("#workNews").hide();
$("#workNews").fadeIn(500);
$("#workNews").delay(4000);
$("#workNews").fadeOut(500);

显然 FF 不喜欢像 IE 显然允许的那样将这些函数调用链接在一起。尽管如此,FF 开发人员的控制台仍然会抱怨正在读取的文本文件中存在某种语法错误,但这似乎不会导致任何重大错误。

【讨论】:

    【解决方案2】:

    您是否尝试过更改选择器?而不是#workNews => #worknews

    $('#worknews').text(...).

    大写字母影响 :o。我想。

    【讨论】:

    • 我个人不明白为什么骆驼大小写会破坏代码,特别是因为我几乎所有的变量都实现了相同的样式。不过,我试过了……什么也没做。
    • 它不会破坏或产生这种类型的错误,它根本找不到选择器的匹配项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多