2013-08-08 16 views
5

Sto provando a chiamare il mio URL remoto con gli attributi aggiunti all'URL.Bootstrap 3 typeahead.js - attributi url remoti

Per ora ho questo lavoro:

$('#league').typeahead({ 
     remote: '/typeahead/get_league?query=%QUERY', 
     limit: 10 
}); 

Ora vorrei fare qualcosa di simile:

$('#league').typeahead({ 
     remote: function() { 
      var q = '/typeahead/get_league?query=%QUERY'; 
      if ($('#sport').val()) 
       q += "&sport=" + encodeURIComponent($('#sport').val()); 
      return base_url + q; 
     }, 
     limit: 10 
}); 

Vorrei aggiungere l'attributo get 'sport' per l'URL in modo Posso restringere la mia domanda sul back-end. Ho provato il codice sopra ma ottengo un errore JS.

La versione precedente di Bootstrap Typeahead consentiva questo tipo di installazione. È stato molto utile in quanto ho potuto aggiornare l'URL remoto ogni volta che una chiave viene colpita.

Qualche idea su come farlo funzionare per questa versione?

risposta

10

remote è esclusivamente per typeahead.js (non parte di Bootstrap). Ma non stai usando correttamente il remote, può essere una stringa o un oggetto , non una funzione.

Quando è necessario modificare l'URL richiesta, è possibile utilizzare replace:

$('#league').typeahead({ 
    remote: { 
     url: '/typeahead/get_league?query=%QUERY', 
     replace: function() { 
      var q = '/typeahead/get_league?query=%QUERY'; 
      if ($('#sport').val()) { 
       q += "&sport=" + encodeURIComponent($('#sport').val()); 
      } 
      return base_url + q; 
     } 
    }, 
    limit: 10 
}); 

Controllare la documentazione here

Speranza che aiuta.

+0

Sto usando typeahead.js. Il mio problema deriva dal fatto che non posso usare una funzione. Poiché ho bisogno di impostare il mio URL su init, #sport non contiene ancora alcun valore. Questo è il motivo per cui vorrei impostarlo ogni volta che premo un tasto e non in anticipo ... Sono stato in grado di farlo utilizzando typstead 2.0 di bootstrap, ora con typeahead.js non posso ... questo è un grande inconveniente. Qualche idea su come posso aggirare il problema? – koxon

+0

Vedo, si puoi. Ho aggiornato la mia risposta. –

+0

Grazie per l'aiuto! quello funzionerà definitivamente. – koxon

1

Ecco un esempio completo con anche il risultato QUERY passato. Si noti che quando viene utilizzato il metodo remoto, la sostituzione delle variabili non funziona più. Grazie a hieu-nguyen per la maggior parte!

jQuery('#city').typeahead({ 
    name: "cities", 
    remote: { 
     url: current_web_root + '?action=ajax|getcities&query=%QUERY', 
     replace: function() { 
      var q = current_web_root + '?action=ajax|getcities&query=' + jQuery('#city').val(); 
      if (jQuery('#state').val()) { 
       q += "&state=" + encodeURIComponent(jQuery('#state').val()); 
      } 
      return q; 
     } 
    },  
    cache: false 
}); 

jQuery("#state").change(function (e) { 
    jQuery('#city').val(""); 
}); 
4

La soluzione Hieu Nguyen non funziona per i caratteri% QUERY. Secondo la documentazione Bloodhound.js,

sostituire - .... Se impostata, nessuna sostituzione jolly verrà eseguita su URL.

Bloodhound docs on github

Così% QUERY verrà passato come stringa senza essere sostituito da testo immesso dall'utente.

Quindi si dovrebbe mettere il valore typeahead nel vostro url:

$('#league').typeahead({ 
remote: { 
    url: '/typeahead/get_league?query=%QUERY', 
    replace: function() { 
     var q = '/typeahead/get_league?query=' + $('#league').val(); 
     if ($('#sport').val()) { 
      q += "&sport=" + encodeURIComponent($('#sport').val()); 
     } 
     return base_url + q; 
    } 
}, 
limit: 10 

});

+2

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post - puoi sempre commentare i tuoi post, e una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) essere in grado di [commentare qualsiasi post] (http://stackoverflow.com/help/privileges/comment). – fredtantini

+0

@fredtantini: non posso aggiungere commenti, quindi ho dovuto fare un post. Sicuramente puoi chiudere la risposta su basi di "formalismo", ma per favore la prossima volta prenditi il ​​tuo tempo per capire il post e eventualmente riportarlo come commento, perché a volte la considerazione da parte di nuovi utenti come me può far risparmiare molto tempo a chi legge risposta contrassegnata come accettata. – aKiRa

+0

Grazie aKira, questo ha funzionato per me. –