访问在不同文件中定义的javascript函数

时间:2011-04-04 20:50:00

标签: javascript callback dojo color-palette

我有两个看似相关的问题,访问在不同地方定义的javascript函数。我遇到的第一个问题是调用我在firgbug或safari控制台中定义的函数。我定义了一个名为getRed的函数,如下所示:

    function getRed(row, col)
    {
           // do something stuff and return the red value as a float
    }

我希望能够从控制台测试此功能,但每次尝试调用getRed(1,1)时;例如,我收到如下错误:ReferenceError:未定义getRed

我是否需要进行特殊调用以定义命名空间?我在一个名为drawing.js的javascript文件中定义了这个函数,它在我的html页面中很早就定义了。

我遇到的另一个问题是调用我的dojo调色板的onChange:方法中的同一个drawing.js文件中定义的函数。以下是调色板的代码:

<script type="text/javascript" src="drawing.js"></script>
 //the method colorChange is inside drawing.js which is defined before the dojo 
 //color palette
 <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"
djConfig="parseOnLoad: true">
</script>
<script type="text/javascript">
        dojo.require("dojox.widget.ColorPicker");
        dojo.addOnLoad(function() {
            var c = new dojox.widget.ColorPicker({
                onChange: function(val)
                {
                    console.log("BEFORE");
                    colorChange(val);
                    console.log("AFTER");
                }
            },
            "picker1");
        });
    </script>

这是文件drawing.js中的changeColor的定义:

    function colorChange(val)
{
    console("colorChange!");
}

每次单击调色板时都会出现以下错误:ReferenceError:未定义colorChange。

我是javascript的新手,我确信这两个问题有一个非常相似和简单的解决方案,但我无法在线找到答案。谁能帮我吗?

我很确定正在加载脚本,因为此屏幕截图显示: enter image description here

2 个答案:

答案 0 :(得分:3)

控制台与您的网页位于同一全局范围内。由于getRed()colorChange()都在drawing.js中定义,并且都不能在全局范围内找到,我怀疑drawing.js没有被正确包含。<​​/ p>

要检查是否实际包含了drawing.js(即您的文件路径正确),请转到Firebug的“脚本”选项卡。它将列出当前页面上包含的所有脚本。

答案 1 :(得分:0)

无需额外配置,您只需要确保包含drawing.js,检查文件路径是否正确。如果正确的话,调用应该没有问题。

只需检查您的js位置是否真实,如果您的js文件位于root中,只需在位置前添加斜杠,以便始终从www.example.com/drawing.js加载它将属性language =“javascript”添加到您的&lt; script ....

我希望这会有所帮助。