2014-12-17 3 views
3

Есть ли способ обработки события при нажатии клавиши ввода в функции автозаполнения jquery? Если я щелкаю по пункту результата ниспадающего я иду к следующему адресуРучка введите событие нажатия клавиши внутри jQuery UI autocomplete

window.location.href = '/user?userId=' + ui.item.userId; 

И это отлично работает в разделе Выбор функции. Но что, если мне нужно изменить свой url, когда я набрал несколько букв и выпадающий список результатов отображается, но я не нажимаю на один из элементов, вместо этого я просто нажимаю клавишу ввода, как я могу его обработать?

$('#search').autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
      url: "/search/users", 
      data: { 
       query: request.term 
      }, 
      success: function(data) { 
       var transformed = $.map(data, function(el) { 
        return { 
         name: el.name, 
         email: el.email 
        }; 
       }); 
       response(transformed); 
      }, 
      error: function() { 
       response([]); 
      } 
     }); 
    }, 
    select: function(event, ui) { 
     window.location.href = '/user?userId=' + ui.item.userId; 
    } 
}).data("ui-autocomplete")._renderItem = function(ul, item) { 
    var $a = $("<a></a>").append(item.name); 
    highlightText(this.term, $a); 
    return $("<li></li>").append($a).appendTo(ul); 
}; 

Я пытался с этим, но мне интересно, если есть лучшее решение

$('#search').on('keypress', function(e) { 
    if (e.which == 13 && $(this).val()) { 
     window.location.href = '/users/list?name=' + $(this).val(); 
    } 
}); 

ответ

1

Там нет ничего плохого в идее нажатия клавиши. Если вы хотите, альтернативное решение, которое я предложил бы использовать form тег:

<form action="https://stackoverflow.com/users/list" method="get"> 
    <input id="search" name="name"> 
</form> 

Форма представит на Нажатие Enter при условии, что меню автозаполнения не активным.