2013-08-08 9 views
5

Ich versuche, meine Remote-URL mit zusätzlichen Attributen der URL aufrufen.Bootstrap 3 typeahead.js - Remote-URL-Attribute

Für jetzt habe ich diese Arbeit:

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

Nun möchte Ich mag so etwas tun:

$('#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 
}); 

Ich mag würde die GET-Attribut ‚Sport‘ an die URL hinzuzufügen, so Ich kann meine Abfrage im Backend eingrenzen. Ich habe den obigen Code ausprobiert, bekomme aber einen JS-Fehler.

Die vorherige Version von Bootstrap Typeahead erlaubt diese Art von Setup. Es war sehr nützlich, da ich die entfernte URL jedes Mal aktualisieren konnte, wenn ein Schlüssel getroffen wurde.

Irgendeine Idee, wie man das für diese Version macht?

Antwort

10

remote ist ausschließlich für typeahead.js (nicht Teil von Bootstrap). Aber Sie verwenden nicht die remote richtig, es kann entweder eine Zeichenfolge oder Objekt, keine Funktion sein.

Wenn Sie die URL ändern müssen, können Sie replace verwenden:

$('#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 
}); 

Überprüfen Sie die docs here

Hoffe, es hilft.

+0

Ich benutze typeahead.js. Mein Problem kommt von der Tatsache, dass ich eine Funktion nicht verwenden kann. Da ich meine URL auf die Init setzen muss, enthält der #sport noch keinen Wert. Das ist, warum ich es jedes Mal einstellen möchte, wenn ich einen Schlüssel und nicht vor der Zeit ... Ich konnte das mit Bootstrap 2.0 typeahead tun, jetzt mit typeahead.js kann ich nicht ... das ist ein großer Nachteil. Irgendeine Idee, wie ich das umgehen kann? – koxon

+0

Ich sehe, ja du kannst. Ich habe meine Antwort aktualisiert. –

+0

Danke für die Hilfe! das wird definitiv funktionieren. – koxon

1

Hier ist ein vollständiges Beispiel mit dem QUERY-Ergebnis. Beachten Sie, dass bei Verwendung der Remote-Methode die Variablensubstitution nicht mehr funktioniert. Danke an hieu-nguyen für den Großteil davon!

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

Hieu Nguyen Lösung wird nicht für% QUERY Wildcards funktionieren. Gemäß Bloodhound.js Dokumentation,

ersetzen - .... Wenn gesetzt, wird keine Platzhalter Ersetzung auf URL durchgeführt werden.

Bloodhound docs on github

So wird% QUERY als String übergeben werden, ohne vom Benutzer eingegebenen Text durch ersetzt.

So sollten Sie typeahead Wert in Ihre URL setzen:

$('#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

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag - du kannst deine eigenen Beiträge jederzeit kommentieren, und sobald du genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) hast, wirst du das tun in der Lage sein [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment). – fredtantini

+0

@fredtantini: Ich kann keinen Kommentar hinzufügen, also musste ich einen Beitrag machen. Sicherlich können Sie die Antwort auf eine "Formalismus" -Basis schließen, aber bitte nehmen Sie sich beim nächsten Mal Zeit, den Beitrag zu verstehen und seinen Inhalt als Kommentar zu melden, denn manchmal kann die Berücksichtigung durch neue Benutzer wie ich den Lesern viel Zeit sparen Antwort als akzeptiert markiert. – aKiRa

+0

Danke aKira, das hat bei mir funktioniert. –