Я работаю с листовкой (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);
}
Теперь хорошие новости: если я закомментирую часть привязки событий, цикл завершится, и листовка будет вести себя так, как должна. Однако, когда я привязываю событие click, все становится странным. Событие запускается один раз для каждого элемента в коллекции, к которой я привязан. Когда данные загружаются с сервера, я получаю всплывающее предупреждение каждый раз в цикле с идентификатором текущего элемента. Такое ощущение, что он запускается «onload», а не «onclick». В довершение всего, он также не регистрирует щелчки по divIcons после загрузки.
Здесь должно быть что-то, чего мне не хватает, но я не могу понять, что именно. Какие-либо предложения?
Этот вопрос похож на (Маркер в листовке, событие щелчка)
Решение: я изменил последнюю строку объявления divIcon на:
}).on('click', function(e){ alert(data.Id); });
Теперь это работает, как задумано. Я предполагаю, что странное поведение привязки является результатом отсутствия привязки ссылки на определенный метод и листовки, имеющей своего рода функциональный сбой в своем коде управления событиями.
Я сохранил аргумент «e», так как это то, что показывают документы листовки. Я не использую его, но если кто-то другой скопирует это, ему это может понадобиться.