Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 Raphaeljs悬停在关联数组的每个元素上_Javascript_Svg_Raphael - Fatal编程技术网

Javascript Raphaeljs悬停在关联数组的每个元素上

Javascript Raphaeljs悬停在关联数组的每个元素上,javascript,svg,raphael,Javascript,Svg,Raphael,我正在使用Raphael JS绘制地图,并在地图上标记城市 你可以看到代码 我有一组元素-地图周围的圆圈(每个圆圈代表一个城市),当我在上面悬停时,我想执行特定的操作。 问题是,我不能为所有元素编写一个函数,我必须为每个元素编写相同的函数 我该如何解决这个问题 我试过了 for(城市中的变量城市){ 城市[城市]。悬停(函数(){ 城市[city].attr({“fill”:“#FF5B3A”}); }, 函数(){ 城市[city].attr({“fill”:“none”}); } )}; 但

我正在使用Raphael JS绘制地图,并在地图上标记城市

你可以看到代码

我有一组元素-地图周围的圆圈(每个圆圈代表一个城市),当我在上面悬停时,我想执行特定的操作。 问题是,我不能为所有元素编写一个函数,我必须为每个元素编写相同的函数

我该如何解决这个问题

我试过了

for(城市中的变量城市){
城市[城市]。悬停(函数(){
城市[city].attr({“fill”:“#FF5B3A”});
},
函数(){
城市[city].attr({“fill”:“none”});
}
)};

但在那之后,当我在任何城市上空盘旋时,它会把最后一个城市涂成红色,而不是我在上空盘旋的城市。
请给我一个解决方案

您需要创建一个闭包和/或使用“this”,这样创建的函数将知道它应用于哪个元素,而不仅仅是for循环中的最后一个元素

有两种方法可以做到这一点,其中一种是直接创建其所指城市的功能范围

或者您可以使用“this”来引用正确的元素

for (var city in cities) {
       cities[city].hover(function () {
         this.attr({"fill": "#FF5B3A"});
       },
       function () {
         this.attr({"fill": "none"});
       })
};