use*_*306 2 javascript jquery leaflet
我从那以后一直在做传单API.我一直被困在函数调用中,这给了我意想不到的行为.代码如下
var it=0;
var map = L.map('map1', {
center:[51.505,-0.09],
zoom: 2,
});
L.tileLayer('http://{s}.tile.cloudmade.com/c77b2fb7bfb74f74998061abda20d58f/997/256/{z}/{x}/{y}.png',{
attribution: '2013 © @ Rajat/Akshat',
maxZoom: 18
}).addTo(map);
var marker = L.marker([51.5,-0.09], {draggable: true, opacity: 0.8}).addTo(map);
function onDragEnd(e) {
var lat_marker = e.target._latlng.lat;
var lng_marker = e.target._latlng.lng;
}
var i=6;
marker.on('dragend',onDragEnd(event));
Run Code Online (Sandbox Code Playgroud)
map1 divid已在HTML页面上创建.
现在问题是这个功能:
marker.on('dragend',onDragEnd(event));
Run Code Online (Sandbox Code Playgroud)
它显示了这个错误
ReferenceError:未定义事件
marker.on( 'dragend',onDragEnd(事件));
但是当我没有任何争论地通过它时marker.on('dragend',onDragEnd());,它就有效.
另外,我想在函数中添加自己的参数:
marker.on('dragend',onDragEnd(i));
Run Code Online (Sandbox Code Playgroud)
i一些简单的变量在哪里.但是这个功能出了问题,它没有按预期工作.
onDragEnd(event)
Run Code Online (Sandbox Code Playgroud)
执行该功能.你只需要传入函数引用
marker.on('dragend',onDragEnd);
Run Code Online (Sandbox Code Playgroud)
在函数执行函数后立即使用().您希望此方法在拖动结束时充当回调.
当调用此方法时,事件对象在默认情况下以y传递.所以你不必担心将它作为一个参数传递
function onDragEnd(event) {
Run Code Online (Sandbox Code Playgroud)
要传递自定义参数,您可以尝试这些行中的某些内容.
for(var i=0; i < $('span').length ; i++) {
$('span').eq(i).on('click', bindClick(i));
}
function bindClick(index) {
return function(e) {
dragEnd(e, index);
}
}
function dragEnd(e, index) {
console.log(e);
console.log(index);
}
Run Code Online (Sandbox Code Playgroud)
码
for (var i = 0; i < $('.marker').length; i++) {
var marker = $('.marker').eq(i);
$('span').eq(i).on('dragend', bindDragEnd(i));
}
function bindDragEnd(index) {
return function (e) {
dragEnd(e, index);
}
}
function dragEnd(e, index) {
console.log(e);
// you can access the marker object
//by accessing it like $('.marker').eq(index)
}
Run Code Online (Sandbox Code Playgroud)