&引用;“未定义勾号”;Firefox上的错误,使用d3

&引用;“未定义勾号”;Firefox上的错误,使用d3,firefox,cross-browser,d3.js,Firefox,Cross Browser,D3.js,一般来说,我对d3和web编程都是新手。我已经根据这一点整理了一个部队布局图。该图在Safari、Chrome和Opera中运行良好(我还没有检查IE)。但是,当我尝试在Firefox中使用它时,会出现错误“Tick is not defined”。我使用的是Firefox 12 如果您对此有任何建议,我们将不胜感激 谢谢 克莱尔 (代码是一个js脚本文件,在鼠标点击时触发,下面是force布局部分。) 查看整个源代码有助于澄清问题。顶部有一个if/else语句,用于检查错误。代码的其余部分都在

一般来说,我对d3和web编程都是新手。我已经根据这一点整理了一个部队布局图。该图在Safari、Chrome和Opera中运行良好(我还没有检查IE)。但是,当我尝试在Firefox中使用它时,会出现错误“Tick is not defined”。我使用的是Firefox 12

如果您对此有任何建议,我们将不胜感激 谢谢 克莱尔

(代码是一个js脚本文件,在鼠标点击时触发,下面是force布局部分。)


查看整个源代码有助于澄清问题。顶部有一个if/else语句,用于检查错误。代码的其余部分都在else块中。这就是问题的根源

当在条件块中定义时,函数声明(如您的示例中的tick())具有特定于浏览器的奇怪行为。这就解释了函数声明、函数表达式和定义不正确且支持不一致的函数语句之间的区别(这是您在else块中使用大量代码无意中创建的)

如果您从else块中提取代码,我认为跨浏览器的行为应该更可预测

一般来说,创建巨大的、长的条件块不是好的编程实践。它不仅引入了这些类型错误的可能性,而且可能很难阅读和理解。同样的情况也适用于嵌套非常深的条件

尽量保持你的条件相当严格,这样生活在条件块中的代码直接对应于条件本身的含义。你应该能够读出条件的意图,并大声屏蔽内容,它们应该一起有意义。与条件无关的代码应尽可能位于包含条件的函数的顶层。通过将代码分解成有意义的函数并控制条件,可以提高可读性

在上面的示例中,您可以执行以下操作:

if (error) {                            
    window.console.log(error);      
} 
else {
    window.console.log(dataset);
}

dataset = data 
color = getColor()
vizType = "force";
...
... rest of code

最后一点意见是,使用类似于或的工具来验证代码。它会自动指出这样的问题。它有时可能过于严格,但至少了解它在抱怨什么是一种很好的学习体验。

看起来它应该有效。作为一个实验,将滴答声的声明移到传递给on()的位置上方是否会产生影响?你能把包含d3.csv调用的其余代码发布到某个地方吗?谢谢你回来。我试着移动勾号函数,但没有改变。它只是告诉我还有一些东西没有定义(圆圈没有定义,我试着移动圆圈,然后svg没有定义…这一直持续到我回来打钩没有定义)我已经发布了上面的完整脚本,我希望它是好的,就像我说的,我是编程新手,所以请说如果你看到任何大的失误。谢谢你的帮助!这太棒了!非常感谢您的时间和帮助。
if (error) {                            
    window.console.log(error);      
} 
else {
    window.console.log(dataset);
}

dataset = data 
color = getColor()
vizType = "force";
...
... rest of code