同じイベントで2つの要素を処理する必要があるが、この場合は混乱しているという古典的な質問。私は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 */
});
});
2番目のバインドされたイベント(上記と同じコード内):
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 */
は持っていますが2つ作成さif
れます。
簡単に言えば(私は思う)何が起こっているのか:
- 空の変数を作成します
- それらは非同期で実行されるため、空であると見なされます
- 1つではなく2つの結果を作成します
- 追加:それらが再度起動されると、それぞれが独自の結果のみをリセットします(markerslayerとmarkerslayer_copyがあるようなものです)。