When you have auto-complete list or if you want to swipe over some buttons you can not use touchstart or touchend because soon as you tap on button/list of buttons, touchstart/touchend will be executed and no matter what you do next slide/swipe this is not going to be executed because tap on a button have higher priority.
So to fix this problem you can use something like this:
var touchmoved;
$autocomplete.on('touchend click','li', function(e){
if(touchmoved != true){
$input.val($(this).text().trim());
$autocomplete.empty();
}
}).on('touchmove', function(e){
touchmoved = true;
}).on('touchstart', function(){
touchmoved = false;
});