Estoy tratando de encontrar un ejemplo que funcione del elemento de tipo de arranque de Twitter Bootstrap que hará una llamada ajax para completar su menú desplegable.
Tengo un ejemplo de autocompletar jquery que funciona que define la url de ajax y cómo procesar la respuesta
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var options = { minChars:3, max:20 };
$("#runnerquery").autocomplete('./index/runnerfilter/format/html',options).result(
function(event, data, formatted)
{
window.location = "./runner/index/id/"+data[1];
}
);
..
¿Qué necesito cambiar para convertir esto al ejemplo de typeahead?
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var options = { source:'/index/runnerfilter/format/html', items:5 };
$("#runnerquery").typeahead(options).result(
function(event, data, formatted)
{
window.location = "./runner/index/id/"+data[1];
}
);
..
Voy a esperar a que se resuelva el problema ' Agregar soporte de fuentes remotas para typeahead '.
Respuestas:
Editar: typeahead ya no está incluido en Bootstrap 3. Echa un vistazo:
A partir de Bootstrap 2.1.0 hasta 2.3.2, puede hacer esto:
Para consumir datos JSON como este:
Tenga en cuenta que los datos JSON deben ser del tipo mime correcto (aplicación / json) para que jQuery los reconozca como JSON.
fuente
get
lugar degetJSON
? Parece más apropiadoPuede usar la bifurcación BS Typeahead que admite llamadas ajax. Entonces podrás escribir:
fuente
["aardvark", "apple"]
,. Tuve que establecer explícitamente eldataType
parámetro en la$.post
llamada. Ver jQuery.post () .Content-type
encabezado enapplication/json
source
ejecutando la función.A partir de Bootstrap 2.1.0:
HTML:
Javascript:
Ahora puede hacer un código unificado, colocando enlaces "json-request" en su código HTML.
fuente
$(this)[0].$element.data('link')
.this.$element.data('link')
Todas las respuestas se refieren a BootStrap 2 typeahead, que ya no está presente en BootStrap 3.
Para cualquier otra persona dirigida aquí que busque un ejemplo de AJAX usando el nuevo Twitter post-Bootstrap typeahead.js , aquí hay un ejemplo de trabajo. La sintaxis es un poco diferente:
Este ejemplo utiliza tanto la sugerencia síncrona (la llamada a processSync ) como la asíncrona, por lo que verá que algunas opciones aparecen de inmediato y luego se agregan otras. Puedes usar uno u otro.
Hay muchos eventos vinculables y algunas opciones muy potentes, incluido el trabajo con objetos en lugar de cadenas, en cuyo caso usaría su propia función de visualización personalizada para representar sus elementos como texto.
fuente
["Thing 1","Thing 2"]
, o con una función de visualización personalizada, una matriz de objetos de acuerdo con sus necesidades, por ejemplo[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
, ahora quiero mostrar dos columnas en el menú desplegable de mecanografía con identificación y etiqueta. ¿Cómo puedo hacer eso?He aumentado el plugin Bootstrap typeahead original con capacidades ajax. Muy facil de usar:
Aquí está el repositorio de github: Ajax-Typeahead
fuente
JSON
? Me estoy poniendoUncaught TypeError: Cannot read property 'length' of undefined
. Estoy usandojson_encode($array)
y enviando encabezados correctos ('Content-Type: application/json; charset=utf-8'
). Versión jqueryjQuery v1.9.1
Hice algunas modificaciones en jquery-ui.min.js:
y agregue el siguiente CSS
Funciona perfecto
fuente
Estoy usando este metodo
fuente
Uno puede hacer llamadas usando Bootstrap. La versión actual no tiene ningún problema de actualización de la fuente. Problemas para actualizar la fuente de datos de typeahead de Bootstrap con respuesta posterior , es decir, la fuente de bootstrap una vez actualizada puede modificarse nuevamente.
Consulte a continuación para ver un ejemplo:
fuente
Para aquellos que buscan una versión en coffeescript de la respuesta aceptada:
fuente
Revisé esta publicación y todo no quería funcionar correctamente y, finalmente, reconstruí los bits de algunas respuestas, así que tengo una demostración 100% funcional y la pegaré aquí como referencia: pegue esto en un archivo php y asegúrese de que las inclusiones estén en el lugar correcto.
fuente
Intente esto si su servicio no devuelve el encabezado de tipo de contenido json / aplicación correcto:
fuente
ACTUALIZACIÓN: modifiqué mi código usando esto bifurcación
También en lugar de usar $ .cada uno cambié a $ .map como lo sugirió Tomislav Markovski
Sin embargo, me encuentro con algunos problemas al obtener
como puedes ver en una publicación más reciente, estoy tratando de descubrir aquí
Espero que esta actualización sea de alguna ayuda para usted ...
fuente
Array.map
lugar, usaría$.each
y reemplazaría el contenido de toda susuccess
función de devolución de llamada convar manufacturers = results.data.manufacturers.map(function (item) { return { id: item.Manufacturer.id, manufacturer: item.Manufacturer.manufacturer } });
No tengo un ejemplo de trabajo para ti ni tengo una solución muy limpia, pero déjame decirte lo que he encontrado.
Si observa el código de JavaScript para TypeAhead, se ve así:
Este código utiliza el método jQuery "grep" para hacer coincidir un elemento en la matriz fuente. No vi ningún lugar al que pudiera conectar una llamada AJAX, por lo que no hay una solución "limpia" para esto.
Sin embargo, una forma un tanto hacky de hacerlo es aprovechar la forma en que funciona el método grep en jQuery. El primer argumento para grep es la matriz de origen y el segundo argumento es una función que se utiliza para hacer coincidir la matriz de origen (observe que Bootstrap llama al "emparejador" que proporcionó cuando lo inicializó). Lo que podría hacer es establecer la fuente en una matriz ficticia de un elemento y definir el emparejador como una función con una llamada AJAX. De esa manera, ejecutará la llamada AJAX solo una vez (ya que su matriz fuente solo tiene un elemento).
Esta solución no solo es hacky, sino que sufrirá problemas de rendimiento ya que el código TypeAhead está diseñado para realizar una búsqueda en cada pulsación de tecla (las llamadas AJAX en realidad solo deberían ocurrir cada pocas pulsaciones de tecla o después de una cierta cantidad de tiempo inactivo). Mi consejo es que lo intente, pero quédese con una biblioteca de autocompletado diferente o solo use esto para situaciones que no sean AJAX si tiene algún problema.
fuente
cuando use ajax, intente en
$.getJSON()
lugar de$.get()
si tiene problemas con la visualización correcta de los resultados.En mi caso, obtuve solo el primer carácter de cada resultado cuando lo usé
$.get()
, aunque lojson_encode()
hice en el lado del servidor.fuente
Yo uso
$().one()
para resolver esto; Cuando se carga la página, envío ajax al servidor y espero a que termine. Luego pase el resultado a la función.$().one()
es importante. Porque forzar typehead.js para adjuntar a la entrada una vez. Perdón por la mala escritura.fuente
?>
fuente