2

自 2 天以来,我一直在做传单 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 &copy @ 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));

map1 divid 已在 HTML 页面上创建。

现在的问题是这个功能:

marker.on('dragend',onDragEnd(event));

它显示了这个错误

ReferenceError:未定义事件

marker.on('dragend',onDragEnd(event));

但是当我没有任何参数地通过它时marker.on('dragend',onDragEnd());,它就起作用了。

另外,我想在函数中添加我自己的参数:

marker.on('dragend',onDragEnd(i));

哪里i是一些简单的变量。但是这个函数有问题,它没有按预期工作。

4

1 回答 1

5
onDragEnd(event)

执行功能。你只需要传入函数引用

marker.on('dragend',onDragEnd);

在函数后使用()立即执行函数。您希望此方法在拖动结束时充当回调。

当调用此方法时,默认传递事件对象。所以你不必担心将它作为参数传递

function onDragEnd(event) {

要传入自定义参数,您可以尝试这些行中的某些内容..

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);
}

代码

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)
}

检查小提琴

于 2013-08-22T17:09:59.273 回答