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;
        });