У меня есть список ссылок, и у меня есть это окно поиска #reportname. Когда пользователь вводит в поле поиска, автозаполнение покажет текст ссылок в списке.
<div class="inline">
<div class="span-10">
<label for="reportname">Report Name</label>
<input type="text" name="reportname" id="reportname" />
</div>
<div class="span-10 last">
<button type="button" id="reportfind">Select</button>
</div>
</div>
Пользователь может затем использовать стрелку на клавиатуре, чтобы выбрать один из текстов, и когда он нажмет ENTER, браузер перейдет по адресу ссылки. Пока все хорошо.
<script type="text/javascript">
$(document).ready(function () {
$("#reportname").autocomplete({
source: $.map($("a.large"), function (a) { return a.text }),
select: function () { $("#reportfind").click() }
})
$("#reportfind").click(function () {
var reportname = $("#reportname")[0].value
var thelinks = $('a.large:contains("' + reportname + '")').filter(
function (i) { return (this.text === reportname) })
window.location = thelinks[0].href
})
});
</script>
Проблема в том, что при вводе пользователем автозаполнение показывает список, а затем пользователь использует мышь, чтобы щелкнуть один из результатов. При использовании навигации по клавиатуре содержимое поля поиска изменяется, но если пользователь щелкает один из параметров, поле поиска не изменяется, и событие выбора запускается немедленно.
Как заставить скрипт работать с выбором клавиатуры и мышью? Как я могу различить выбранные события, которые запускаются с помощью клавиатуры, и события, запускаемые с помощью мыши?