Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 功能';未定义';当它是_Javascript_Html_Raphael_Modernizr - Fatal编程技术网

Javascript 功能';未定义';当它是

Javascript 功能';未定义';当它是,javascript,html,raphael,modernizr,Javascript,Html,Raphael,Modernizr,我在Inkscape中绘制了一张地图,将其保存为SVG并用于将其转换为Raphial。 我将生成的代码放入一个名为drawMap的函数中,并将其保存在js/map.js中 js/map.js: function drawMap(){ var map = Raphael('map', '100mm', '100mm'); var layer4 = map.set(); var path3041 = map.path("m 106.15571,153.07817 -1.64315,13.749

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

js/map.js:

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的containts添加到html文件中,但收到错误“Raphial未定义”

我假设这是因为在加载
raphial-min.js
之前调用了raphial,所以在调用
drawMap()
之前,我使用Modernizer加载
raphial-min.js
map.ja
,但现在我得到了错误:

“未定义drawMap”

Index.html:

<!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>

风险
drawMap()
现代化负荷({
加载:“js/raphael-min.js”,
加载:“js/map.js”,
完成:drawMap()
})

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

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

Modernizer实现中的几个问题

  • complete
    属性中,您不应该调用
    drawMap
    ,只引用它,因为它还没有加载,您必须在匿名内联函数中引用它
  • 加载前不应调用
    drawMap()
  • 在modernizer.load()语法中,javascript不允许在同一对象上使用多个
    load
    属性
  • 因此:

    drawMap();
    Modernizr.load({
        load: 'js/raphael-min.js',
        load: 'js/map.js',
        complete: drawMap()
    })
    
    应该是这样的:

    Modernizr.load({
        load: ['js/raphael-min.js', 'js/map.js'],
        complete: function() {drawMap();}
    })
    
    另外,我不知道为什么要动态加载这些。这可能没有必要。你可以这样做:

    <script src="js/raphael-min.js"></script>
    <script src="js/map.js"></script>
    <script>
    drawMap();
    </script>
    
    
    drawMap();
    
    现代化实施中的几个问题

  • complete
    属性中,您不应该调用
    drawMap
    ,只引用它,因为它还没有加载,您必须在匿名内联函数中引用它
  • 加载前不应调用
    drawMap()
  • 在modernizer.load()语法中,javascript不允许在同一对象上使用多个
    load
    属性
  • 因此:

    drawMap();
    Modernizr.load({
        load: 'js/raphael-min.js',
        load: 'js/map.js',
        complete: drawMap()
    })
    
    应该是这样的:

    Modernizr.load({
        load: ['js/raphael-min.js', 'js/map.js'],
        complete: function() {drawMap();}
    })
    
    另外,我不知道为什么要动态加载这些。这可能没有必要。你可以这样做:

    <script src="js/raphael-min.js"></script>
    <script src="js/map.js"></script>
    <script>
    drawMap();
    </script>
    
    
    drawMap();
    
    @amnotiam-我已经添加了另一个问题。我已经做了更改,但是地图仍然没有显示,firebug说“如果标记有“type”属性,它应该等于“text/javascript”或“application/javascript”。另外脚本必须是可解析的(语法正确)。@jfriend00:关于“应该是这个:”代码块,您仍在尝试引用
    drawMap
    。除非我误解了这个问题,否则我认为
    drawMap
    在加载的两个文件中的一个文件中,因此当调用
    modernizer.load
    时,它将不可用。@gilbertbw-我发布的是哪个版本,你试过了吗?我修复了
    标记版本的引号错误。@amnotiam-您是正确的。我把它移到了一个匿名函数中。@amnotiam-我已经添加了另一个问题。我已经做了更改,但是地图仍然没有显示,firebug说“如果标记有“type”属性,它应该等于“text/javascript”或“application/javascript”。另外脚本必须是可分析的(语法正确)。@jfriend00:关于“应该是这样的吗?”代码块,您仍在尝试引用
    drawMap
    。除非我误解了这个问题,否则我认为
    drawMap
    在加载的两个文件中的一个文件中,因此当调用
    modernizer.load
    时,它将不可用。@gilbertbw-我发布的是哪个版本,你试过了吗?我修复了
    标记版本的引号错误。@amnotiam-您是正确的。我把它移到了一个匿名函数中,但我使用modernizer来加载脚本,并且只在需要加载时调用'drawMap'compleate@gilbertbw-我在Modernizer之前看到一个绘制地图的调用。但是我正在使用Modernizer加载脚本,并且仅在加载时调用“drawMap”compleate@gilbertbw-我看到之前有人叫我画地图
    现代化器