2015-11-03 17 views
6

Il setup è Google Maps API Javascript (v3) su un app PhoneGap, e ho l'installazione di completamento automatico:Non è possibile selezionare l'indirizzo da completamento automatico di Google Maps API Javascript

var that = this 
this.autocomplete = new google.maps.places.Autocomplete(domNode) 
this.listener = google.maps.event.addListener(
    this.autocomplete, 'place_changed', function (place) { 
    var place = that.autocomplete.getPlace() 
    ... 
    } 
}) 

E questo codice funziona sul mio Android costruisce e nel browser. Il problema è quando eseguo questo sotto iOS. Digito una stringa nella casella di ricerca, vengono visualizzati i risultati del completamento automatico, ma se si fa clic su uno di essi viene semplicemente chiuso il menu a discesa, ma il risultato non viene inserito nella casella di ricerca. L'ascoltatore non spara neanche. Nessun errore mostra sulla console Javascript.

Questo è tutto il codice di Google, quindi non sono a conoscenza di come eseguire il debug. Qualsiasi aiuto sarebbe apprezzato. Grazie!

risposta

2

Sono stato alle prese con lo stesso problema su iPhone in uno dei miei progetti, dopo ore di indagine, ha rilevato che il problema è causato da lib fastclick.

FastClick.prototype.onTouchEnd = function(event) { 
    ... 
    if (!this.needsClick(targetElement)) { 
     event.preventDefault(); 
     this.sendClick(targetElement, event); 
    } 

    return false; 
}; 

FastClick.prototype.needsClick = function(target) { 
    'use strict'; 
    switch (target.nodeName.toLowerCase()) { 

    // Don't send a synthetic click to disabled inputs (issue #62) 
    case 'button': 
    case 'select': 
    case 'textarea': 
     if (target.disabled) { 
      return true; 
     } 

     break; 
    case 'input': 

     // File inputs need real clicks on iOS 6 due to a browser bug (issue #68) 
     if ((this.deviceIsIOS && target.type === 'file') || target.disabled) { 
      return true; 
     } 

     break; 
    case 'label': 
    case 'video': 
     return true; 
    } 

    return (/\bneedsclick\b/).test(target.className); 
}; 

Perché .pac-container Basta div e span, FastClick presuppone che non è cliccabile e invita preventDefault e per superare questo problema ho aggiunto needsclick classe a tutti gli elementi .pac-*

+0

Vedi http://stackoverflow.com/a/20056485/1823675 su come aggiungere una classe agli elementi '.pac- *'. –

Problemi correlati