25

これが私の問題です: Google Places Autocomplete を使用して、ユーザーから場所に関する情報を収集しています。

イベント「place_changed」で、この情報を保存します。ただし、ユーザーが複数の場所を追加できるようにしたいと考えています。したがって、この場所が保存された後、入力をクリアしたいと思います。

ただし、Google オートコンプリートは、入力フィールドの最後のエントリを自動的に置き換えます。とにかくそれを取り除くために?

詳細:

var inputDiv = $('#myinput');
var options = {
  types: ['(cities)']
};
var autocomplete = new google.maps.places.Autocomplete(inputDiv[0], options);

google.maps.event.addListener(autocomplete, 'place_changed', function() {
    var places = autocomplete.getPlace();
    savePlaces(places);

    console.log(inputDiv.val()); // 'Paris, France'
    inputDiv.val('');
    console.log(inputDiv.val()); // (an empty string)

    setTimeout(function() {
        console.log(inputDiv.val()); // 'Paris, France' (It's back!)
        inputDiv.val('');
        console.log(inputDiv.val()); // (an empty string)      
    }, 1);

    setTimeout(function() {
        console.log(inputDiv.val()); // (an empty string)      
    }, 10);
}

あなたは私に言うでしょう、まあそれは問題ないようです、タイムアウトでそれをクリアしてください。しかし、入力から離れてクリックすると(フォーカスが失われます)。前回のエントリーが再び登場!

それを修正するアイデアはありますか?Google のドキュメントに次のような関数が見つかりませんでした

autocomplete.clear();

ありがとう!

4

6 に答える 6

18

オートコンプリートは内部的に入力のぼかしイベントをリッスンしているように見えるので、リッスンする何かを与えてからフィールドをクリアしましょう:

inputId_div.blur();    
setTimeout(function(){
 inputId_div.val('')
 inputId_div.focus();},10);
于 2013-01-18T01:42:45.333 に答える
-1

Dr.Molle の優れた回答のわずかな強化として、少なくとも最近のブラウザーでは、 z-index プロパティを使用してフラッシュを回避できます。

var input = $('#[id of autocomplete field]');
$(input).blur();
setTimeout(function() {
    var container = $('.pac-container');
    var zIndex = $(container).css('z-index');
    $(container).css('z-index', -1);
    input.val('')
    input.focus();
    setTimeout(function() {
        $(container).css('z-index', zIndex);
    }, 200);
}, 10);
于 2013-08-25T01:29:35.097 に答える
-4

試す:

document.getElementById('myinput').value = '';

また

inputId_div.value = '';

を使用している理由がわかりませんinputId_div[0]。私はそれがjQueryのものでなければならないと思います。

于 2013-01-17T17:00:18.660 に答える