2017-02-10 12 views
0

Я пытаюсь создать функцию прослушивателя кнопок внутри bindPop в листовке. Но it does not read parameter of onclick function. В приведенном ниже коде alertConfirmed()function works fine для меня butfilterEventsBasedOnCluster(feature) does not read the parameter 'feature'. Он говорит, что функция не определена. особенность - объект.передать аргументы внутри кнопки функция onclick внутри bindPopUp в листовке

вот код:

layer.bindPopup('<div id="alert">Found...!<input type="button" value="Please confirm" onclick="alertConfirmed()"> <input type="button" id="create" value="see patients" onclick="filterEventsBasedOnCluster(feature)"><table id="table"></table></div>') 

`

Любая помощь очень ценится.

+0

В настоящее время вы отправляете функцию параметра в качестве объекта функции. Вы должны отправить его как + функцию +, если вы определили функцию как объект переменной в своей программе. –

ответ

-1

попробовать это:

Я просто исправляя неправильные части только:

onclick="filterEventsBasedOnCluster('+feature+')" 

Вы не Попутный переменную должным образом.

+0

Спасибо. Это сработало для меня. Однако он говорит «Неожиданный идентификатор». Он не принимает окончание двойной кавычки, т. Е. ('+ Feature +') « – user2953637

+0

Да, я только что показал вам способ обращения. Это ответ, если я решил вашу проблему –

0

Если вы присоединяете обработчики событий через 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", как вам нужно, чтобы создать строку работоспособных кода, и этот код будет иметь доступ только к переменным в глобальной области. Конечно, вы можете указать свои данные, но вы не сможете иметь ссылки на переменные снаружи.