2015-10-26 5 views
1

Я хочу преобразовать this example code в функцию. Я хочу сделать это, потому что у меня есть 2 поля ввода на одной странице, которые должны использовать этот автозаполнение. Я мог бы сделать это по-старому, как я привык, но я хочу узнать что-то об этом типе программирования. Это то, что я сейчас:Преобразование в анонимную функцию

var Lookup = { 
    init: function(field) { 
     this.field = field; 
     this.autocomplete = null; 
     this.autocomplete = new google.maps.places.Autocomplete((document.getElementById(this.field)), { 
      types: ['geocode'] 
     }); 
     this.autocomplete.addListener('place_changed', this.fillInAddress()); 
    }, 
    geolocate: function() { 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(function(position) { 
       var geolocation = { 
        lat: position.coords.latitude, 
        lng: position.coords.longitude 
       }; 
       var circle = new google.maps.Circle({ 
        center: geolocation, 
        radius: position.coords.accuracy 
       }); 
       this.autocomplete.setBounds(circle.getBounds()); 
      }); 
     } 
    }, 
    fillInAddress: function() { 
     var place = this.autocomplete.getPlace(); 
     console.log(place); 
    } 
} 

я исполню это с:

$(document).ready(function() { 
    Lookup.init('location_from'); 
    Lookup.init('location_to'); 
}); 

Все работает, два поля имеют функцию автозаполнения. Но когда я выбираю адрес я получаю эту ошибку:

Uncaught TypeError: Cannot read property 'apply' of undefined

Это происходит в функции fillInAddress. Выполняется вызов AJAX (запрашивается дополнительная информация о месте), но затем он останавливается. Может ли кто-нибудь сказать мне, почему это?

ответ

1

Я думаю, что вы хотите создать плагин JQuery для выполнения этой задачи:

$.fn.extend({ 
    geocode: function() { 
     return this.each(function() { 
      var ac = new google.maps.places.Autocomplete(this), { 
       types: ['geocode'] 
      }); 
      ac.addListener('place_changed', function() { 
       var place = ac.getPlace(); 
       console.log(place); 
       // ... etc ... 
      }); 
     }); 
    } 
}); 

и

$('#location_from, #location_to').geocode(); 
Смежные вопросы