Eu tenho um campo de entrada, onde tento fazer sugestões de preenchimento automático. Código parece
<input type="text" id="myinput">
<div id="myresults"></div>
No blur()
evento de entrada, quero ocultar a div dos resultados:
$("#myinput").live('blur',function(){
$("#myresults").hide();
});
Quando escrevo algo em minha entrada, envio solicitação para o servidor e obtenho resposta json, analise-a na estrutura ul-> li e coloque essa ul na minha #myresults
div.
Quando clico nesse elemento li analisado, desejo definir o valor de li para inserir e ocultar #myresults
div
$("#myresults ul li").live('click',function(){
$("#myinput").val($(this).html());
$("#myresults").hide();
});
Tudo está indo bem, mas quando clico no meu blur()
evento li é acionado antes click()
e o valor da entrada não recebe o html do li.
Como posso configurar o click()
evento antes blur()
?
blur
realmente estiver disparando após você clicar em umli
, provavelmente não precisará executar$("#myresults").hide()
no manipulador de cliques. O que parece estar acontecendo é que$(this).html()
está retornando uma string vazia. Você poderialog
oualert
$(this).html()
para ter certeza?blur()
e nosclick()
manipuladores, não há ações após oblur()
términoRespostas:
Solução 1
Ouça em
mousedown
vez declick
.Os eventos
mousedown
eblur
ocorrem um após o outro quando você pressiona o botão do mouse, masclick
somente quando você o libera.Solução 2
Você pode
preventDefault()
emmousedown
bloquear o menu suspenso de roubar foco. A pequena vantagem é que o valor será selecionado quando o botão do mouse for liberado, e é assim que os componentes de seleção nativos funcionam. JSFiddlefonte
FIDDLE
fonte
Eu enfrentei esse problema e usando
mousedown
não é uma opção para mim.Eu resolvi isso usando
setTimeout
na função manipuladorfonte
Acabei de responder uma pergunta semelhante: https://stackoverflow.com/a/46676463/227578
Uma alternativa para as soluções de redução do mouse é ignorar os eventos de desfoque causados ao clicar em elementos específicos (ou seja, no seu manipulador de desfoque, pule a execução se for o resultado de clicar em um elemento específico).
fonte
As soluções Mousedown não funcionam para mim quando clico em elementos que não são botões. Então, aqui está o que eu fiz com a função blur no meu código:
fonte