当您需要处理具有相同事件的两个元素但在这种情况下它变得一团糟时,这是一个经典问题。我正在使用leaflet.js,但会使代码更通用
一个空的 var 声明:
var markerslayer;
第一个绑定事件:
$("#slider").on("valuesChanged", function (e){
var markers = new Array();
//check if empty, otherwise resets layer
if(markerslayer){
map.removeLayer(markerslayer);
};
/*some more code here */
$.post (a.php file here, {some data}, function(data){
/* markerslayer array is made here */
/* add a layer based on markerslayer array */
});
});
第二个绑定事件(与上面的代码相同):
map.on("moveend", function (e){
var markers = new Array();
//check if empty, otherwise resets layer
if(markerslayer){
map.removeLayer(markerslayer);
};
/*some more code here */
$.post (a.php file here, {some data}, function(data){
/* markerslayer array is made here */
/* add a layer based on markerslayer array */
});
});
现在因为我认为它们在我第一次运行我的脚本时都是异步的,所以它们都同时运行并且它们创建了两个,尽/* make some divs based on markerslayer array */
管我if
一开始就有。
简而言之(我认为)正在发生的事情是:
- 我创建了一个空变量
- 他们异步运行,所以他们认为它是空的
- 他们创造了两个结果而不是一个
- 附加:当它们再次被触发时,每个只重置它自己的结果(就像有一个标记层和一个标记层_复制)。