非常基本的javascript函数调用

时间:2013-08-22 17:08:10

标签: 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 &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));

已在HTML网页上创建了map1 div ID。

现在问题是这个功能:

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

显示此错误

  

ReferenceError:未定义事件

     

marker.on( 'dragend',onDragEnd(事件));

但是当我在没有任何参数marker.on('dragend',onDragEnd());的情况下传递它时,它就可以了。

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

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

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

1 个答案:

答案 0 :(得分: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)
}

<强> Check Fiddle