78 lines
2.2 KiB
JavaScript
78 lines
2.2 KiB
JavaScript
var suggestSelector = '';
|
|
|
|
function suggestInit(selector)
|
|
{
|
|
suggestSelector = selector;
|
|
$(selector).after('<div id="suggestContainer"></div>');
|
|
$(selector).bind('input', function () {
|
|
var query = $(selector).val();
|
|
$('#suggestContainer').html('');
|
|
$.ajax({
|
|
url: "/json/search?query=" + query,
|
|
context: document.body
|
|
}).done(function (data) {
|
|
res = data.suggestions;
|
|
newHtml = '';
|
|
$('#suggestContainer').html('').show();
|
|
for (var i = 0; i < res.length; i++) {
|
|
newHtml += '<div><a href="' + res[i].data + '">' + res[i].value + '</a></div>';
|
|
}
|
|
$('#suggestContainer').html(newHtml);
|
|
}).fail(function (jqXHR, textStatus) {
|
|
alert("Request failed: " + textStatus);
|
|
});
|
|
}).bind('keydown', function (event) {
|
|
suggestKeyPress(event.which);
|
|
}).bind('focus', function(){if($(selector).val())$('#suggestContainer').show();});
|
|
$(selector).parent().bind('blur', function(){$('#suggestContainer').hide();});
|
|
$('#suggestContainer').hide();
|
|
}
|
|
|
|
function suggestKeyPress(key)
|
|
{
|
|
switch (key) {
|
|
case 27:
|
|
//ESCAPE
|
|
$('#suggestContainer').hide();
|
|
break
|
|
case 13:
|
|
//ENTER
|
|
if ( $('div.hover','#suggestContainer').length > 0 ) {
|
|
link = $('a', $('div.hover','#suggestContainer')).attr('href');
|
|
} else {
|
|
link = $('a', $('div','#suggestContainer').first()).attr('href');
|
|
}
|
|
window.location.href = link;
|
|
break
|
|
case 38:
|
|
//UP
|
|
if ( $('div.hover','#suggestContainer').length > 0 ) {
|
|
if ($('div.hover','#suggestContainer').prev()) {
|
|
$('div.hover','#suggestContainer').removeClass('hover').prev().addClass('hover');
|
|
} else {
|
|
$('div','#suggestContainer').removeClass('hover').last().addClass('hover');
|
|
}
|
|
} else {
|
|
$('div','#suggestContainer').last().addClass('hover');
|
|
}
|
|
break
|
|
case 40:
|
|
//DOWN
|
|
if ( $('div.hover','#suggestContainer').length > 0 ) {
|
|
if ($('div.hover','#suggestContainer').next()) {
|
|
$('div.hover','#suggestContainer').removeClass('hover').next().addClass('hover');
|
|
} else {
|
|
$('div','#suggestContainer').removeClass('hover').first().addClass('hover');
|
|
}
|
|
} else {
|
|
$('div','#suggestContainer').first().addClass('hover');
|
|
}
|
|
break
|
|
default :
|
|
if($(suggestSelector).val()) {
|
|
$('#suggestContainer').show();
|
|
}
|
|
}
|
|
|
|
}
|