Estou tentando encontrar um exemplo de trabalho do elemento de digitação de inicialização do twitter que fará uma chamada ajax para preencher sua lista suspensa.
Eu tenho um exemplo de preenchimento automático de jquery de trabalho existente que define o URL do ajax e como processar a resposta
<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];
}
);
..
O que preciso alterar para convertê-lo no exemplo do 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];
}
);
..
Vou aguardar a solução do problema ' Adicionar suporte a fontes remotas para digitação antecipada '.
Respostas:
Edit: typeahead não está mais incluído no Bootstrap 3. Confira:
Desde o Bootstrap 2.1.0 até a 2.3.2, você pode fazer o seguinte:
Para consumir dados JSON como este:
Observe que os dados JSON devem ser do tipo MIME correto (application / json) para que o jQuery o reconheça como JSON.
fonte
get
vez degetJSON
? Parece mais apropriado.Você pode usar o garfo BS Typeahead que suporta chamadas ajax. Então você será capaz de escrever:
fonte
["aardvark", "apple"]
,. Eu tive que definir explicitamente odataType
parâmetro na$.post
chamada. Veja jQuery.post () .Content-type
cabeçalho paraapplication/json
source
executar a função.A partir do Bootstrap 2.1.0:
HTML:
Javascript:
Agora você pode criar um código unificado, colocando os links "json-request" no seu código HTML.
fonte
$(this)[0].$element.data('link')
.this.$element.data('link')
Todas as respostas se referem ao cabeçalho inicial do BootStrap 2, que não está mais presente no BootStrap 3.
Para qualquer pessoa direcionada aqui procurando um exemplo de AJAX usando o novo typeahead.js do Twitter pós-Bootstrap , aqui está um exemplo de trabalho. A sintaxe é um pouco diferente:
Este exemplo usa sugestões síncronas (a chamada para processSync ) e assíncronas; portanto, algumas opções são exibidas imediatamente e outras são adicionadas. Você pode apenas usar um ou outro.
Existem muitos eventos vinculáveis e algumas opções muito poderosas, incluindo o trabalho com objetos em vez de seqüências de caracteres. Nesse caso, você usaria sua própria função de exibição personalizada para renderizar seus itens como texto.
fonte
["Thing 1","Thing 2"]
, ou com uma função de exibição personalizada, uma matriz de objetos de acordo com as suas necessidades, por exemplo[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
, agora eu quero mostrar duas colunas em suspenso typeahead com ID e rótulo. Como eu posso fazer isso?Aumentei o plug-in Bootstrap original, com recursos de ajax. Muito fácil de usar:
Aqui está o repositório do github: Ajax-Typeahead
fonte
JSON
? Eu estou recebendoUncaught TypeError: Cannot read property 'length' of undefined
. Estou usandojson_encode($array)
e enviando cabeçalhos corretos ('Content-Type: application/json; charset=utf-8'
). Versão jqueryjQuery v1.9.1
Fiz algumas modificações no jquery-ui.min.js:
e adicione o seguinte css
Funciona perfeito.
fonte
Eu estou usando esse método
fonte
Pode-se fazer chamadas usando o Bootstrap. A versão atual não apresenta nenhum problema de atualização da fonte. Problema ao atualizar a fonte de dados do tipo bootstrap com resposta posterior , ou seja, a fonte do bootstrap depois de atualizada pode ser modificada novamente.
Consulte abaixo um exemplo:
fonte
Para aqueles que procuram uma versão com café da resposta aceita:
fonte
Eu passei por este post e tudo não queria funcionar corretamente e, eventualmente, reuni os bits com algumas respostas, então eu tenho uma demonstração 100% funcional e a colo aqui para referência - cole-a em um arquivo php e verifique se as inclusões estão incluídas O lugar certo.
fonte
Tente isso se o seu serviço não estiver retornando o cabeçalho correto do aplicativo / tipo de conteúdo json:
fonte
UPDATE: modifiquei meu código usando este fork
também, em vez de usar $ .each, mudei para $ .map, como sugerido por Tomislav Markovski
No entanto, estou encontrando alguns problemas obtendo
como você pode ver em um post mais recente, estou tentando descobrir aqui
espero que esta atualização seja de alguma ajuda para você ...
fonte
Array.map
vez disso, eu usaria$.each
e substituiria o conteúdo de toda a suasuccess
função de retorno de chamada porvar manufacturers = results.data.manufacturers.map(function (item) { return { id: item.Manufacturer.id, manufacturer: item.Manufacturer.manufacturer } });
Não tenho um exemplo prático para você nem uma solução muito limpa, mas deixe-me contar o que encontrei.
Se você olhar para o código javascript para TypeAhead, ele será assim:
Este código usa o método jQuery "grep" para corresponder a um elemento na matriz de origem. Eu não vi nenhum lugar que você pudesse conectar em uma chamada AJAX, portanto não há uma solução "limpa" para isso.
No entanto, uma maneira um tanto hacky que você pode fazer isso é tirar proveito da maneira como o método grep funciona no jQuery. O primeiro argumento para grep é a matriz de origem e o segundo argumento é uma função usada para corresponder à matriz de origem (observe que o Bootstrap chama o "correspondente" que você forneceu ao inicializá-lo). O que você pode fazer é definir a origem para uma matriz fictícia de um elemento e definir o correspondente como uma função com uma chamada AJAX. Dessa forma, ele executará a chamada AJAX apenas uma vez (já que sua matriz de origem possui apenas um elemento).
Essa solução não é apenas hacky, mas sofrerá com problemas de desempenho, pois o código TypeAhead foi projetado para fazer uma pesquisa a cada pressionamento de tecla (as chamadas AJAX devem realmente acontecer apenas a cada pressionamento de tecla ou após um certo tempo ocioso). Meu conselho é experimentá-lo, mas use uma biblioteca de preenchimento automático diferente ou use-a apenas para situações que não sejam do AJAX se você tiver algum problema.
fonte
ao usar o ajax, tente em
$.getJSON()
vez de$.get()
se tiver problemas com a exibição correta dos resultados.No meu caso, obtive apenas o primeiro caractere de cada resultado quando usei
$.get()
, embora useijson_encode()
no lado do servidor.fonte
eu uso
$().one()
para resolver isso; Quando a página é carregada, envio o ajax para o servidor e aguardo a conclusão. Depois passe o resultado para a função.$().one()
é importante. Porque force typehead.js a anexar à entrada uma vez. desculpe por escrever mal.fonte
?>
fonte