Ta funkcja działa (zawiesza połączenie), ale wartość wyszukiwania nie jest aktualizowana. Jeśli wpiszę „hello”, wartość przekazywana do funkcji ($ (this) .val ()) to „he”. Czy istnieje sposób na zaktualizowanie wartości klucza, aby przeszedł przez całe wyszukiwanie?

$('#search').keyup(function () {

  if ($(this).val().length > 1) {
    var searchthis = $(this).val()

    if (srun === 1 && stimer) {
      if (stimer) {
        window.clearTimeout(stimer)
      }

    } else {
      srun = 1
      var stimer = setTimeout(loadsearch(searchthis), 2000)
    }
  }

})  

Loadsearch () ustawia var srun na 0;

1
Robert 15 grudzień 2019, 21:41
Czy możesz pokazać nam funkcję loadsearch? Jeśli nie jest to funkcja wyższego rzędu, nie należy jej wywoływać podczas przekazywania jej do ustawienia limitu czasu. Następnie powinieneś użyć setTimeout(() => loadsearch(searchthis), 1000*2)
 – 
The Fool
15 grudzień 2019, 21:53
Potrzebujesz zweryfikowanego przypadku testowego. Wykonaj console.log z searchthis do debugowania
 – 
Thanh Trung
15 grudzień 2019, 21:53
Problem jest w nawiasach: loadsearch(searchthis). Zajrzyj tutaj stackoverflow.com/questions/4120781/… i tutaj: stackoverflow.com/questions/2037203/…
 – 
Hans Dash
15 grudzień 2019, 22:43
I wtedy prawdopodobnie jest też problem z wyszukiwaniem wartości, które jest wykonywane w momencie keyup, a nie po odpaleniu timeoutu.
 – 
Hans Dash
15 grudzień 2019, 22:47

1 odpowiedź

Wygląda na to, że loadSearch jest wywoływane tylko raz, gdy srun nie jest ustawiony. Powinieneś zorganizować swój kod w ten sposób

//put timer outside
var stimer;
$('#search').keyup(function(e) {  
    if ($(this).val().length <= 1) {
        return;
    }

    var searchthis = $(this).val();

    window.clearTimeout(stimer);

    stimer = setTimeout(function() {
        loadsearch(searchthis);
    }, 2000);       
});

setTimeout oczekują, że pierwszy parametr będzie funkcją wywoływalną, dlatego setTimeout(function(){})

Jeśli umieścisz setTimeout(loadsearch(searchthis)), wykona ona bezpośrednio funkcję loadSearch, bez czekania 2s.

0
Thanh Trung 15 grudzień 2019, 22:03
Rządzisz! Dziękuję Ci.
 – 
Robert
15 grudzień 2019, 22:38
Następnie proszę o zaznaczenie mojej jako prawidłowej odpowiedzi jako podziękowanie :)
 – 
Thanh Trung
15 grudzień 2019, 23:07