複数の Google プレイス オートコンプリート フィールドを同じページに統合しようとしていますが、このダミー コードが機能する理由がわかりません。
$ ->
options = types: ["(cities)"]
insts = []
elements = document.getElementsByClassName('autocomplete_city')
insts[0] = new google.maps.places.Autocomplete(elements[0], options)
google.maps.event.addListener insts[0], "place_changed", ->
place = this.getPlace()
datas = place.geometry.location.lat()+"::"+place.geometry.location.lng()
$(elements[0]).next('input.autocomplete_city_id').val(datas)
insts[1] = new google.maps.places.Autocomplete(elements[1], options)
google.maps.event.addListener insts[1], "place_changed", ->
place = this.getPlace()
datas = place.geometry.location.lat()+"::"+place.geometry.location.lng()
$(elements[1]).next('input.autocomplete_city_id').val(datas)
このループバージョンは機能しませんが:
$ ->
options = types: ["(cities)"]
insts = []
elements = document.getElementsByClassName('autocomplete_city')
i = 0
for element in elements
insts[i] = new google.maps.places.Autocomplete(element, options)
google.maps.event.addListener insts[i], "place_changed", ->
place = this.getPlace()
datas = place.geometry.location.lat()+"::"+place.geometry.location.lng()
$(element).next('input.autocomplete_city_id').val(datas)
i += 1
この場合、最初のオートコンプリート入力を入力しても、最後の 'autocomplete_city_id' のみがオートコンプリート データで埋められます (= レシーバーの「要素」変数は常に配列の最後の変数です)。
これらの 2 つのスニペットはまったく同じではありませんか、それとも深刻な Javascript OOP 原則が欠けていますか? それはCoffeescriptトラップですか?