jQuery-如何使用Enter键在列表中打开URL
我有一个jQuery“自动建议”类型的搜索框。它使用Href填充搜索结果列表,以便用户可以单击列表中的某个项目转到相关页面。用户还可以使用箭头键滚动列表进行选择。我现在要做的是允许用户按Enter键转到他们选择的URL。我使用了Enter键,但我不确定应该如何构造列表或从列表中提取Href等。。或者我应该有第二个隐藏列表,其中只包含纯URL 以下是到目前为止的代码,相关部分标记为####:jQuery-如何使用Enter键在列表中打开URL,jquery,Jquery,我有一个jQuery“自动建议”类型的搜索框。它使用Href填充搜索结果列表,以便用户可以单击列表中的某个项目转到相关页面。用户还可以使用箭头键滚动列表进行选择。我现在要做的是允许用户按Enter键转到他们选择的URL。我使用了Enter键,但我不确定应该如何构造列表或从列表中提取Href等。。或者我应该有第二个隐藏列表,其中只包含纯URL 以下是到目前为止的代码,相关部分标记为####: 风险值结果列表=“”; 函数回调(结果){ 结果_list.show(); var项目=[]; $。每个
风险值结果列表=“”;
函数回调(结果){
结果_list.show();
var项目=[];
$。每个(结果、功能(i、项目){
项目。推送(“”);
});
结果_list.append(items.join(“”));
}
选择的风险值列表;
var li='';
$('.search')。每个(函数(){
$(此).keyup(函数(e){
var search_type=$(this.attr('name');
结果列表=$(“#”+搜索类型+“#列表”);
li=结果_list.children();
var key_code=e.keyCode;
如果($.inArray(键代码[37,38,39,40])>-1){
如果(e.which==40){
如果(选择列表){
list_selected.removeClass('selected');
下一步=列表_选中。下一步();
如果(next.length>0){
list_selected=next.addClass('selected');
}否则{
list_selected=li.eq(0).addClass('selected');
}
}否则{
list_selected=li.eq(0).addClass('selected');
}
}否则如果(例如,哪个===38){
如果(选择列表){
list_selected.removeClass('selected');
next=list_selected.prev();
如果(next.length>0){
list_selected=next.addClass('selected');
}否则{
list_selected=li.last().addClass('selected');
}
}否则{
list_selected=li.last().addClass('selected');
}
}
}否则{
//####相关章节###
如果(key_code==13){//在这里做什么??
window.location=list_selected.html();
// ###
}否则{
结果_list.empty();
变量参数={
“搜索类型”:搜索类型,
'q':$(this.val()
};
if($(this.val()){
ajaxThis(“搜索框”、参数、回调);
}
}
}
});
});
<script>
var results_list = '';
function callback(result) {
results_list.show();
var items = [];
$.each(result, function (i, item) {
items.push("<li><a href='/view/raw/" + item.collection + "/" + item.classname + "/" + item._id + "'>" + item.Title + "</a></li>");
});
results_list.append(items.join(''));
}
var list_selected;
var li = '';
$('.search').each(function () {
$(this).keyup(function (e) {
var search_type = $(this).attr('name');
results_list = $('#' + search_type + '_list');
li = results_list.children();
var key_code = e.keyCode;
if ($.inArray(key_code, [37, 38, 39, 40]) > -1) {
if (e.which === 40) {
if (list_selected) {
list_selected.removeClass('selected');
next = list_selected.next();
if (next.length > 0) {
list_selected = next.addClass('selected');
} else {
list_selected = li.eq(0).addClass('selected');
}
} else {
list_selected = li.eq(0).addClass('selected');
}
} else if (e.which === 38) {
if (list_selected) {
list_selected.removeClass('selected');
next = list_selected.prev();
if (next.length > 0) {
list_selected = next.addClass('selected');
} else {
list_selected = li.last().addClass('selected');
}
} else {
list_selected = li.last().addClass('selected');
}
}
} else {
// ### relevant section ###
if (key_code == 13) { // what to do here??
window.location = list_selected.html();
// ###
} else {
results_list.empty();
var params = {
'search_type': search_type,
'q': $(this).val()
};
if ($(this).val()) {
ajaxThis("search_box", params, callback);
}
}
}
});
});
</script>
if ( key_code == 13 && $('.selected').length > 0 ) { // Make sure there's a selection
var selected_item = $('li.selected:first a'); // select li and a
// Two options:
// A.) Make sure the li a's href is an absolute path so you can do:
window.location = selected_item.attr('href');
// B.) Keep the relative href, trigger a click on the element:
$(selected_item).trigger('click');
}