5

La domanda dice tutto. Il mio completamento automatico jQuery ottiene la sua origine da una delle mie proprie API. Se non riesce a trovare alcuna corrispondenza, restituisce semplicemente "nessuna corrispondenza trovata" che viene quindi visualizzata nel menu a discesa. Quando l'utente si concentra su questo, il testo nella casella cambia in "Nessuna corrispondenza trovata". Quello che voglio fare è visualizzare "nessuna corrispondenza trovata" nel menu a discesa, ma renderlo non selezionabile/selezionabile. Questo è il mio codice fin d'ora:Completamento automatico jQuery, se non è stata trovata alcuna corrispondenza, viene visualizzato "Nessuna corrispondenza trovata" nel menu a discesa ma non consente di concentrarsi su di esso

$(document).ready(function() { 
    $("input#id_address").autocomplete({ 
     delay: 300, 
     minLength: 3, 
     source: function(request, response) { 
      $.getJSON("/pin/cache/", {q:encodeURI(request.term)}, function(results) { 
       res = results.results; 
       response($.map(res, function(item) { 
        return { 
         label: item.address, 
         value: item.address, 
         lat: parseFloat(item.lat), 
         lng: parseFloat(item.lng) 
        } 
       })); 
      }); 
     }, 
     select: function(event, ui) { 
      if (ui.item.value == 'no matches found') { 
       return; 
      } 
      else { 
       $("#id_address").val(ui.item.value); 
       var pos = new google.maps.LatLng(ui.item.lat, ui.item.lng); 
       map.setCenter(pos); 
       map.setZoom(14); 
       placeMarker(pos); 
      } 
     }, 
    }); 
}); 

Come potete vedere, io sto usando un ciclo se altro per verificare la presenza di "nessun risultato" a selezionare: funzione per non fare nulla se si seleziona nessun risultato. Tuttavia, riempie ancora il testo "nessuna corrispondenza trovata" a fuoco. Voglio che la funzionalità predefinita di inserire il testo a fuoco quando vengono trovate le corrispondenze, ma quando non vengono trovate corrispondenze, il menu a discesa dovrebbe essere unfocusable. Eventuali suggerimenti ?

risposta

2

Una possibile soluzione consiste nel posizionare un evento sul gestore della select focus() che controlla il testo "nessuna corrispondenza trovata" e in tal caso lo offusca immediatamente.

$("input#ip_address").focus(function(){ 
    if($(this).text()=="no matches found") { 
     $(this).blur(); 
    } 
}); 
+0

Grazie, ha funzionato perfettamente. – tapan

0

è possibile utilizzare un evento JavaScript per deselezionare il "no match" o utilizzare un droplist div simulato in cui non è possibile selezionare "no match".