首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数“未定义”时

函数“未定义”时
EN

Stack Overflow用户
提问于 2012-08-04 15:32:07
回答 2查看 693关注 0票数 0

我用Inkscape绘制了一张地图,并将其保存为SVG,并使用http://readysetraphael.com/将其转换为Raphial。我将生成的代码放入一个名为drawMap的函数中,并将其保存在js/map.js中。

js/map.js:

代码语言:javascript
复制
function drawMap(){
 var map = Raphael('map', '100mm', '100mm');
 var layer4 = map.set();
 var path3041 = map.path("m 106.15571,153.07817 -1.64315,13.74999 4.60661,10.36488 6.04618,9.21323 9.21323,3.16705 6.04618,6.04618 8.34949,8.06157 77.4487,1.72748 3.45496,-48.79108 z");
 path3041.attr({id: 'path3041',parent: 'layer4',opacity: '0.98999999',fill: '#ffb380',stroke: '#000000',"stroke-width": '3',"stroke-linecap": 'butt',"stroke-linejoin": 'miter',"stroke-miterlimit": '4',"stroke-opacity": '1',"stroke-dasharray": 'none'}).data('id', 'path3041');
 layer4.attr({'id': 'layer4','name': 'layer4'});

 //etc, more lines than stackoverflow will let me add

var mapGroups = [layer4,layer5,layer19,layer20,layer21,layer22,layer23,layer24,layer25,layer26,layer6,layer7,layer8,layer9,layer10,layer1,layer3,layer11,layer12,layer13,layer14,layer15,layer16,layer17,layer18,layer27,layer28,layer29,layer30,layer31,layer32,layer33,layer34,layer35,layer36,layer37,layer38,layer39,layer40,layer41,layer42,layer43,layer44,layer45];
}

然后我将raphael-min.js放到'js‘文件夹中。

当我打电话给drawMap()时,firebug说:

"drawMap未定义“

我将map.js的内容添加到html文件中,但是我收到了错误“”。

我以为这是因为在raphial-min.js加载之前就已经调用了raphial,所以在调用drawMap()之前,我使用了现代主义器来加载raphial-min.jsmap.ja,但现在我得到了错误:

"drawMap未定义“

Index.html:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title>Risk</title>
    <script type="text/javascript" src="http://modernizr.com/downloads/modernizr.js"></script>
    </head>
    <body>
    <div id="map">
    <script type="text/javascript">
        drawMap()
        Modernizr.load({
            load: 'js/raphael-min.js',
            load: 'js/map.js',
            complete: drawMap()
        })
    </script>
    </div>
</body>
</html>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-04 15:34:46

现代主义实现中的几个问题。

  1. complete属性中,您不应该调用drawMap,只是引用它,而且由于它还没有加载,所以必须在匿名内联函数中引用它。
  2. 在加载drawMap()之前,不应该调用它。
  3. 在Modernizr.load()语法中,javascript不允许在同一个对象上使用多个load属性。

所以这个:

代码语言:javascript
复制
drawMap();
Modernizr.load({
    load: 'js/raphael-min.js',
    load: 'js/map.js',
    complete: drawMap()
})

应该是这样:

代码语言:javascript
复制
Modernizr.load({
    load: ['js/raphael-min.js', 'js/map.js'],
    complete: function() {drawMap();}
})

另外,我不知道你为什么要动态加载这些。可能没必要。你可以这么做:

代码语言:javascript
复制
<script src="js/raphael-min.js"></script>
<script src="js/map.js"></script>
<script>
drawMap();
</script>
票数 2
EN

Stack Overflow用户

发布于 2012-08-04 15:33:26

在加载脚本文件之前正在调用drawMap

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11809809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档