There is code written by me that works, but does not perform one function correctly. Help me figure out why.
Code:
$(document).ready(function(){ var timer = null; $('#searchword').keydown(function(e){ if( e.keyCode ==38 ){ if( $('#search_suggestion_holder').is(':visible') ){ if( ! $('.selected').is(':visible') ){ $('#search_suggestion_holder li').last().addClass('selected'); }else{ var i = $('#search_suggestion_holder li').index($('#search_suggestion_holder li.selected')) ; $('#search_suggestion_holder li.selected').removeClass('selected'); i--; $('#search_suggestion_holder li:eq('+i+')').addClass('selected'); } } }else if(e.keyCode ==40){ if( $('#search_suggestion_holder').is(':visible') ){ if( ! $('.selected').is(':visible') ){ $('#search_suggestion_holder li').first().addClass('selected'); }else{ var i = $('#search_suggestion_holder li').index($('#search_suggestion_holder li.selected')) ; $('#search_suggestion_holder li.selected').removeClass('selected'); i++; $('#search_suggestion_holder li:eq('+i+')').addClass('selected'); } } }else if(e.keyCode ==13){ if( $('.selected').is(':visible') ){ var value = $('.selected').text(); $('#searchword').val(value); $('#search_suggestion_holder').hide(); $('#search_suggestion_holder li').detach(); $('div.ui-tooltip').detach(); sendsearch() } } }); $('#searchword').bind('textchange', function (event, numberkey) { var keyword = $(this).val() //console.log("это:" + keyword) if(keyword.length > 3) { $('#loader').show(); setTimeout( function(){ var d = [] $('#search_suggestion_holder li').detach(); $('div.ui-tooltip').detach(); $.ajax({ url:'auto-complete.php', data:'keyword='+keyword, dataType:'json', error: function(jqXHR, textStatus, errorThrown) { alert('ошибка, F12'); console.log('jqXHR:'); console.log(jqXHR); console.log('статус:'); console.log(textStatus); console.log('ошибка:'); console.log(errorThrown); }, success: function(d){ //console.log($.isEmptyObject(d)); if (!! $.isEmptyObject(d)){ //console.log("1") var nafin = '<li class="hover-img">Нечего не найдено</li>' $("#search_suggestion_holder").html(nafin) $('#search_suggestion_holder').show(); $('#loader').hide(); } else { //console.log("2") $.each(d, function(i, val) { //console.log(val.icon + val.value); //console.log(i); var descrmin = val.descr.substr(0, 150); //console.log(descrmin) var hoverimg = "img-hover=\"<img src=/shop/medium/" + val.icon+"> <br> "+ descrmin + "\"" var resultat = '<li class="hover-img" title ' + hoverimg + '><img src="/shop/32x32/' + val.icon + '">' + val.value + '</li>' //console.log(resultat) $('#loader').hide(); $(resultat).appendTo("#search_suggestion_holder") //console.log($("#search_suggestion_holder").html()); $('#search_suggestion_holder').show(); $(".hover-img").tooltip({ content: function (event, ui) { return $(this).attr('img-hover'); }, track: true, }); }) } } }); },1500); } else if(keyword.length < 1){ $('#search_suggestion_holder li').detach(); $('div.ui-tooltip').detach(); $('#search_suggestion_holder').hide(); var newwrite = '<li class="hover-img">начните вводить</li>' //console.log(newwrite) $("#search_suggestion_holder").html(newwrite) $('#search_suggestion_holder').show(); $('#loader').hide(); } else if(1 > keyword.length < 3){ $('#loader').show(); $('#search_suggestion_holder li').detach(); $('div.ui-tooltip').detach(); $('#search_suggestion_holder').hide(); var min3 = '<li class="hover-img">Введите больше 3 символов</li>' //console.log(min3) $("#search_suggestion_holder").html(min3) $('#search_suggestion_holder').show(); $('#loader').hide(); //console.log($("#search_suggestion_holder").html()); } }) $('#search_suggestion_holder').on('click','li',function(){ var value = $(this).text(); $('#searchword').val(value); $('#search_suggestion_holder').hide(); $('#search_suggestion_holder li').detach(); $('div.ui-tooltip').detach(); sendsearch() }) function sendsearch() { $("#searchnow").click(); } }); It has setTimeout( function(){ , which logically wraps the entire function of a request to a PHP script and slows down its execution by 1500 мс . The logic is that if a person types quickly, it will not be called, but in fact it works every time change of letters and then overfilled many times after the word was quickly typed. What is wrong?
$('#search_suggestion_holder')variable at the very beginning of the code and rewrite the code using it. "gossiness" will noticeably decrease :) - tutankhamun