Работя с листовка (v 0.7.7) и имам извикване на Ajax, което получава някои данни от сървъра, за да се свърже с моята карта под формата на текстови етикети, върху които може да се кликне. В цикъла, в който обвързвам JSON данните, които получих от сървъра, имам следния код:
var item_name = L.marker([data.X, data.Y],
{
icon: L.divIcon(
{
className:'MapTag',
iconAnchor: [10, 10],
html:'<img src="/Images/Map/Item' + data.Id + '.png">' + data.Name
})
}).on('click', onItemClick(data.Id));
item_layer.addLayer(item_name);
На друго място имам кода onItemClick:
function onItemClick(item_id)
{
alert(item_id);
}
Сега, добрата новина, ако коментирам частта за свързване на събитието от това, цикълът завършва и листовката се държи както трябва. Въпреки това, когато обвържа събитието за щракване, нещата стават странни. Събитието се задейства веднъж за всеки елемент в колекцията, към която се свързвам. Когато данните се зареждат от сървъра, получавам предупреждение, изскачащо всеки път през цикъла с идентификатора на текущия елемент. Има усещането, че се задейства „onload“, а не „onclick“. За капак, той също не регистрира кликвания върху divIcons след зареждане.
Трябва да има нещо, което пропускам тук, но не мога да видя какво е то. Някакви предположения?
ТОЗИ въпрос е подобен на (Маркер в листовка, кликване събитие)
Разрешение: Промених последния ред от декларацията divIcon на:
}).on('click', function(e){ alert(data.Id); });
Това вече работи по предназначение. Предполагам, че странното поведение на обвързване е резултат от несвързването на дефинирана препратка към метод и листовка, която има някакъв вид функционален срив в своя код за управление на събития.
Запазих аргумента „e“, тъй като това е, което показват документите на листовката. Не го използвам, но ако някой друг копира и постави това, може да му потрябва.