Если вы присоединяете обработчики событий через onclick
HTML attribute, вы не можете контролировать параметры, полученные этим обработчиком. Позвольте мне процитировать документы:
Единственный аргумент, переданный указанной функции обработчика событий, является объектом MouseEvent
. Внутри обработчика this
будет элементом, на котором было инициировано событие.
Способ передачи пользовательского аргумента заключается в определении замыкания посредством функции, которая возвращает функцию, которая получает только ссылку на событие.
Это точно такое же решение, как описано в «Leaflet.contextmenu callbacks» и «Leaflet marker event fires at wrong time».
Читайте это. Я серьезно.
Таким образом, в конце концов, это должно выглядеть примерно так:
function getHandlerForFeature(feat) { // A function...
return function(ev) { // ...that returns a function...
console.log(feat); // ...that has a closure over the value.
}
}
layer.bindPopup("<button id='mybutton'>Foo!</button>")
// The button doesn't exist in the DOM until the popup has been opened, so
layer.on('popupopen', function(){
L.DomEvent.on(
document.getElementById('mybutton'),
'click',
getHandlerForFeature(layer) // The result of this call is the event handler func.
);
});
Обратите внимание, что вы можете не использовать синтаксис onclick="code"
, как вам нужно, чтобы создать строку работоспособных кода, и этот код будет иметь доступ только к переменным в глобальной области. Конечно, вы можете указать свои данные, но вы не сможете иметь ссылки на переменные снаружи.
В настоящее время вы отправляете функцию параметра в качестве объекта функции. Вы должны отправить его как + функцию +, если вы определили функцию как объект переменной в своей программе. –