I did some testing and didn't experience your problems... give us your code or put a demo online....
Another thing... you should also check if the input value has changed since the last keyup event, so you don't send the same data if for example the ENTER or SHIFT keys are pressed.... you can store the input value for every keyup event and than compare it with the value of the previous keyup event like this.... $("#term").keyup(function() { if (($(this).val().length >= 3) && ($(this).data("currentValue") ! == $(this).val())) { // do AJAX request } $(this).data("currentValue", $(this).val()); return false; }); Also returning false is a nice idea, so that ancestor keyup events don't trigger this handler....