2

私は以下の動作を達成しようとしています。Google Maps APIのオートコンプリートリストでアイテムが選択されているかどうかを検出するにはどうすればよいですか?

Google Maps APIのオートコンプリートを使用する場合は、リスト内の要素をマウスでクリックするか、Enterキーを押して目的の要素を選択し、必要な値を入力します。ただし、入力要素自体にフォーカスがある間にEnterキーを押すと何も起こりませんので、何とか解決する必要があります。

私はオートコンプリートリストから最初の項目を選択することで、その問題を解決することを決定した

:それはうまく動作しますが、問題は、あなたが下向きの矢印を使用している場合でも、それは最初の項目を選択するということです

$("#autocomplete").keypress(function(e){ 
    if(e.which == 13) { 
    select-first-item(); 
    } 
}); 

キーボードのオートコンプリートリストを参照し、eを押しながらenterを押します。 g。 4番目の結果が選択されます。

これを解決するにはどうすればよいですか?私は:focusで試しましたが、非常に信頼できるとは思われません。ときどき最初の結果が選択され、リストからフォーカスされた項目が選択されることもありました。

Googleマップでは、pac-item-selectedがリストで選択された項目に追加されています。最後に試したのはlengthです。

$("#autocomplete").keypress(function(e){ 
    if ($(".pac-item-selected").length) { 
    if(e.which == 13) { 
     select-first-item(); 
    } 
    } 
} 

しかし、何かを押すとすぐに、クラスがなくなり、長さのチェックが機能しません。 event.preventDefaultを使用すると、オートコンプリートは明らかにkeypress/keydown/...イベントに基づいているため、機能全体が機能しません。

私はきちんと私のバイオリンでマップの作業をすることができませんでしたので、私は古いバイオリンを適応している:http://jsfiddle.net/pbbhH/1222/

は、このためにどんな解決策はありますか?あなたが場所を確認することができますオートコンプリートのplace_changedイベントを使用して

答えて

3

が変更されました:

var input_source = document.getElementById('input_source'); 
var autocomplete = new google.maps.places.Autocomplete(input_source); 
google.maps.event.addListener(autocomplete, 'place_changed', function() { 
     // process 
    }); 
+0

私はplace_changedを使用していますが、オートコンプリートリストを生成し、位置データ(geometry.location)を生成するために使用しています。それはここでどのように役立つだろう、私は。 e。リストにフォーカス/選択された項目があるときに入力ストロークを区別し、リストなしのストロークを入力するにはどうすればよいですか?私が提供したフィドルであなたのソリューションを実装できますか? – take2

+0

あなたは何を伝えたいのですか? –

+0

place_changedは、Maps APIが入力要素の変更を検出するために使用するリスナーです。ユーザーが入力を入力すると、place_changedがトリガーされます。私の場合はすべて正常に動作します。私はあなたが提供したのと同じコードを使用しています。提供されたフィドルを確認してください。問題は、ユーザーがEnterキーを押したときに、自動補完リスト(「pac-item-selected」クラス)で要素が選択されているかどうかを区別できないことです。 – take2

0

を@のダラ・paramarソリューションに加えて:

ちょうどGoogle Maps APIのDocumantationに応じて新しい短いバージョンを追加したいです:

var input_source = document.getElementById('input_source'); 
var autocomplete = new google.maps.places.Autocomplete(input_source); 

autocomplete.addListener('place_changed', fillInAddress); 

function fillInAddress() { 
    //your process here 
}; 
関連する問題