2016-03-08 6 views
0

У меня есть эта функция, которая получает координаты маркеров после его опускает в карту:Строка превратилась в объект после передачи его другой функции?

$(function() { 
$("#add-marker").draggable({ 
    containment: "map", 
    helper: "clone", 
    start: function(evt, ui) { 
     $('#navbar').fadeTo('fast', 0.6, function() {}); 
    }, 
    stop: function(evt, ui) { 

     // Turning coordinates into a string and then removing unwanted characters 
     var string = String(map.containerPointToLatLng([ui.offset.left, ui.offset.top])); 

     string = string.replace('LatLng(', ''); 
     string = string.replace(' ', ''); 
     string = string.replace(')', ''); 
     console.log(typeof string); // ---> Shows my coordinates 
     addProperty(string); 
    } 
}); 
}); 

Проблема заключается в том, что, когда я прохожу «строку», он превращается в объект:

function addProperty(coords){ 
$.magnificPopup.open({ 
    tLoading:"Loading...", 
    modal:false, 
    showCloseBtn: true, 
    closeBtnInside: true, 
    type:'inline', 
    alignTop:false, 
    items:{src: $('#test-popup')}, 
    callbacks: { 
     open: function(coords) { 
      console.log(typeof $(this).data(coords)); // ---> Shows object 
      $('#coords').val($(this).data(coords)); 
     } 
    } 
}); 
} 

Как передать строку в функцию addProperty и по-прежнему использовать ее как строку?

+0

'$ (this) .data (coords)' Что он возвращает? –

+0

Обратите внимание, что, хотя 'string' не является зарезервированным словом, это не большое имя переменной, так как это вызовет много путаницы. –

+0

Rajaprabhu: он возвращает объект. Рори: ты прав, я изменил его на что-то еще. – Barbarah

ответ

3

В вашем втором примере вы имеете дело с coords значением от open обратного вызова, а не от более высокой функции addProperty.

Чтобы это исправить, просто переименовать coords имя переменной из open обратного вызова:

function addProperty(coords) { 

    $.magnificPopup.open({ 

    callbacks: { 

     open: function(newCoords) { 
     /* 
      Here, you can access coords wich is still the string version, 
      or newCoords wich is the new object returned by the callback. 
     */ 
     } 
    } 
    }); 
} 
+0

Итак, как я могу это исправить? – Barbarah

+0

Я отредактировал мое сообщение. –

+0

Все еще не работает, он продолжает отображаться как объект. – Barbarah

1

У вас будет гораздо легче, если вы получаете доступ к lat и lng свойства L.LatLng объекта, возвращенного containerPointToLatLng:

stop: function(evt, ui) { 

    var ll = map.containerPointToLatLng([ui.offset.left, ui.offset.top]); 

    var str = '' + ll.lat.toFixed(4) + ',' + ll.lng.toFixed(4); 

    addProperty(str); 
} 
+0

Спасибо, это упрощенные вещи! – Barbarah