非常基本的javascript函数调用

非常基本的javascript函数调用,javascript,jquery,leaflet,Javascript,Jquery,Leaflet,我已经做了两天的宣传单。我被困在一个函数调用中,它给了我意想不到的行为。代码如下 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

我已经做了两天的宣传单。我被困在一个函数调用中,它给了我意想不到的行为。代码如下

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));
marker.on('dragend',onDragEnd(i));
它显示了这个错误

ReferenceError:未定义事件

在('dragend',onDragEnd(事件))

但是当我在没有任何参数的情况下传递它时('dragend',onDragEnd()),它可以工作

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

marker.on('dragend',onDragEnd(event));
marker.on('dragend',onDragEnd(i));
其中,
i
是一些简单的变量。但是这个函数有点问题,它不能按预期工作

onDragEnd(event)
执行函数。您只需要传入函数引用

marker.on('dragend',onDragEnd);
在函数执行后立即使用()。您希望此方法在拖动结束时充当回调函数

当调用此方法时,默认情况下以y形式传递事件对象。因此,您不必担心将其作为参数传递

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(变量i=0;i<$('span')。长度;i++){
$('span').eq(i).on('click',bindClick(i));
}
函数bindClick(索引){
返回函数(e){
德拉根(e,指数);
}
}
函数dragEnd(e,索引){
控制台日志(e);
控制台日志(索引);
}
代码

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)
}
for(变量i=0;i<$('.marker')。长度;i++){
var marker=$('.marker').eq(i);
$('span').eq(i).on('dragend',bindDragEnd(i));
}
函数bindDragEnd(索引){
返回函数(e){
德拉根(e,指数);
}
}
函数dragEnd(e,索引){
控制台日志(e);
//您可以访问标记对象
//通过像$('.marker').eq(索引)一样访问它
}

有时只要正确缩进代码就可以更容易地发现错误……您不明白错误的哪一部分?我相信,除了Firefox(Gecko)之外,默认情况下每个浏览器都会传入事件对象。谢谢@sushanth。你能告诉我如何定制这个活动吗。与执行此事件处理程序函数类似,它包含一个我可以操纵的变量。示例myarray[i].on('dragend',onDragEnd)。。。我想访问此事件处理程序函数中的i。。。。thanks@rink.attendant.6.. 正确的。。但是jQuery库负责传递工厂库对象,即使在firefox中,默认情况下该对象也会封装事件。所以这应该不是一个问题,我如何在事件处理函数中传递调用对象?请回复