Mam pole wprowadzania, w którym próbuję zasugerować autouzupełnianie. Wygląda na to kod
<input type="text" id="myinput">
<div id="myresults"></div>
W blur()
przypadku zdarzenia input chcę ukryć div wyników:
$("#myinput").live('blur',function(){
$("#myresults").hide();
});
Kiedy piszę coś do swojego wejścia, wysyłam żądanie do serwera i otrzymuję odpowiedź json, parsuję ją do struktury ul-> li i umieszczam ten ul w moim #myresults
div.
Kiedy klikam na ten przeanalizowany element li, chcę ustawić wartość z li na wejście i ukryć #myresults
div
$("#myresults ul li").live('click',function(){
$("#myinput").val($(this).html());
$("#myresults").hide();
});
Wszystko idzie dobrze, ale kiedy klikam, aby blur()
zdarzenie li było uruchamiane wcześniej, click()
a wartość danych wejściowych nie otrzymuje kodu HTML li.
Jak mogę wcześniej ustawić click()
wydarzenie blur()
?
blur
naprawdę uruchamia się po kliknięciu nali
, prawdopodobnie nie musisz wykonywać$("#myresults").hide()
w module obsługi kliknięcia. Wydaje się, że dzieje się to, że$(this).html()
zwraca pusty ciąg. Mógłbyślog
lubalert
$(this).html()
żeby się upewnić?blur()
iclick()
ładowarki, nie ma akcji poblur()
końceOdpowiedzi:
Rozwiązanie 1
Słuchaj
mousedown
zamiastclick
.mousedown
Iblur
zdarzenia jeden po drugim po naciśnięciu przycisku myszy, aleclick
tylko wtedy, kiedy zwolnić.Rozwiązanie 2
Można
preventDefault()
wmousedown
celu zablokowania rozwijaną od kradzieży ostrość. Niewielką zaletą jest to, że wartość zostanie wybrana po zwolnieniu przycisku myszy, tak działają komponenty natywne. JSFiddleźródło
SKRZYPCE
źródło
Miałem do czynienia z tym problemem i używanie
mousedown
nie jest dla mnie opcją.Rozwiązałem to za pomocą
setTimeout
funkcji obsługiźródło
Właśnie odpowiedziałem na podobne pytanie: https://stackoverflow.com/a/46676463/227578
Alternatywą dla rozwiązań wyciszania kursora jest ignorowanie zdarzeń rozmycia spowodowanych kliknięciem określonych elementów (tj. W module obsługi rozmycia pomiń wykonanie, jeśli jest to wynikiem kliknięcia określonego elementu).
źródło
Rozwiązania Mousedown nie działają dla mnie, gdy klikam elementy niebędące przyciskami. Oto, co zrobiłem z funkcją rozmycia w moim kodzie:
źródło