2013-08-22 66 views
2

自2天以來,我一直在做傳單API。我被困在一個函數調用中,這讓我意想不到的行爲。代碼如下非常基本的javascript函數調用

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

地圖1 div id已在HTML頁面上創建。現在

的問題是這樣的功能:

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

它表明這個錯誤

ReferenceError: event is not defined

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

但是當我通過它沒有任何論據marker.on('dragend',onDragEnd());,它的工作原理。

另外,我想補充我自己的參數功能:

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

哪裏i是一些簡單的變量。但是這個功能有些問題,它不能按預期工作。

+0

有時只是正確縮進代碼可以使發現錯誤更容易... –

+0

錯誤的哪部分你不明白? – SLaks

回答

5
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 (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

+0

我相信,除了Firefox(Gecko)之外,事件對象默認傳入每個瀏覽器。 –

+0

謝謝@sushanth。你能告訴我如何定製這個事件嗎?就像這個事件處理函數被執行時一樣,它包含一個我可以操作的變量。示例 myarray [i] .on('dragend',onDragEnd); ...我想訪問我在這個事件處理函數內....感謝 – user609306

+0

@ rink.attendant.6 ..正確..但jQuery庫負責傳遞一個工廠庫對象,即使在Firefox中默認包含事件。所以它不應該是一個問題 –