2013-06-04 41 views
30
var map = L.map('map'); 
var marker = L.marker([10.496093,-66.881935]).on('click', onClick); 
function onClick(e) {alert(e.latlng);} 
marker.addTo(map) 

Khi tôi nhấp vào điểm đánh dấu, thông điệp cảnh báo được: undefinedMarker trong tờ rơi, nhấp kiện

Nhưng nếu tôi đặt nó trong bản đồ biến, nó hoạt động! (hiển thị vĩ độ và kinh độ)

map.on('click', onClick); 

Có ai biết tại sao nó không hoạt động trong điểm đánh dấu không?

+1

Có 'var marker = L.marker ([10.496093, -66.881935]) trên ('click', funciton (e) {alert (e.latlng);});' mang lại kết quả giống nhau không? – asifrc

+0

Tôi đã thực hiện thay đổi bạn đã đề cập nhưng không hoạt động –

+1

Theo bài đăng của Chris bên dưới, bạn có thể sửa đổi mã của mình là 'var marker = L.marker ([10.496093, -66.881935]). AddTo (map) .on ('click', onClick); ' – Ayush

Trả lời

12

Tôi tìm thấy giải pháp:

function onClick(e) {alert(this.getLatLng());} 

sử dụng phương pháp getLatLng() của điểm đánh dấu

+9

có lẽ bạn có thể tạo ra một fiddle cho điều này? không có tài liệu rõ ràng về cách chỉ định các sự kiện nhấp chuột cho các điểm đánh dấu – snowgage

35

Câu trả lời ở trên là đúng và chính đáng chấp nhận. Tuy nhiên, tương tự như @snowgage tôi cần thêm một chút rõ ràng hơn, vì vậy trong trường hợp người khác cũng vậy:

Tờ rơi cho phép các sự kiện kích hoạt hầu như mọi thứ bạn làm trên bản đồ của nó. Trong trường hợp này, một điểm đánh dấu.

Vì vậy, bạn thể tạo một dấu hiệu cho mỗi câu hỏi trên:

L.marker([10.496093,-66.881935]).addTo(map).on('mouseover', onClick); 

Sau đó, tạo ra các chức năng onClick:

function onClick(e) { 
    alert(this.getLatLng()); 
} 

Bây giờ bất cứ lúc nào bạn mouseover marker rằng nó sẽ cháy một cảnh báo của hiện tại lat/long. BAO GIỜ, bạn có thể làm 'click', 'dblclick', vv thay vì 'mouseover' và thay vì cảnh báo lat/long bạn có thể sử dụng js trong phần onClick để làm bất cứ điều gì bạn muốn.

Đây là tài liệu hướng dẫn để làm theo: http://leafletjs.com/reference.html#events

11

bổ sung thông tin liên quan: Một nhu cầu chung là phải vượt qua ID của đối tượng thể hiện bằng điểm đánh dấu cho một số cuộc gọi ajax với mục đích lấy thêm thông tin từ máy chủ .

Dường như khi chúng ta làm:

marker.on('click', function(e) {... 

Các e điểm đến một MouseEvent, mà không cho chúng tôi đến được với các đối tượng đánh dấu. Nhưng có một đối tượng được xây dựng trong this lạ lùng, yêu cầu chúng tôi sử dụng this.options để truy cập đối tượng options cho phép chúng tôi chuyển bất kỳ thứ gì chúng ta cần. Trong trường hợp trên, chúng ta có thể vượt qua một số ID trong một lựa chọn, chúng ta hãy nói objid sau đó bên trong hàm trên, chúng ta có thể nhận được giá trị bằng cách gọi: this.options.objid

11

Dưới đây là một jsfiddle với một cuộc gọi chức năng: https://jsfiddle.net/8282emwn/

var marker = new L.Marker([46.947, 7.4448]).on('click', markerOnClick).addTo(map); 

function markerOnClick(e) 
{ 
    alert("hi. you clicked the marker at " + e.latlng); 
} 
+0

cách truy cập các thuộc tính của người đánh dấu như tên và các biến khác? – nikhilvj

+1

@nikhilvj: đây là một jsfiddle mở rộng với một số tùy chọn bổ sung: https://jsfiddle.net/8282emwn/139/ –

-1

Một chút muộn cho bữa tiệc, tìm thấy điều này trong khi tìm kiếm một ví dụ về sự kiện nhấp chuột đánh dấu. Lỗi không xác định mà áp phích gốc nhận được là do hàm onClick được gọi trước khi nó được xác định. Hoán đổi dòng 2 và 3 và nó sẽ hoạt động.

+0

Không chính xác. Xem cẩu trong Javascript https://developer.mozilla.org/en-US/docs/Glossary/Hoisting – nikoshr

Các vấn đề liên quan