Я собрал рабочий прототип автозаполнения, который добавляет выделенный текст в виде диапазона, это отлично работает. Я бы хотел вызвать этот код из другого места, поэтому у меня есть это:
$("#searchBox").autocomplete({
var testSourceData = ["First thing", "Second thing", "Third thing"];
source: testSourceData,
select: function(e, ui) {
//create formatted searchTerm
addSearchTerm(e, ui);
$(this).val('');
return false;
},
...
});
function addSearchTerm(e, ui) {
var searchTerm = ui.item.value;
var span = $("<span>").text(searchTerm);
var a = $("<a>").addClass("remove").attr({
href: "javascript:",
title: "Remove " + searchTerm
}).text("x").appendTo(span);
//add searchTerm to searchBox
span.insertBefore("#searchBox");
}
У меня такой вопрос; объекты e и ui, откуда они передаются? Если я хочу вызвать в addSearchTerm из другого места, что мне нужно, чтобы передать его?
В настоящее время я пытаюсь вызвать его при нажатии клавиши ввода, поэтому я пытаюсь это:
$("#searchBox").keydown(function (event) {
if (event.keyCode == 13) {
addSearchTerm(event, $("#searchBox"));
}
});
Но получаю ошибку:
Uncaught TypeError: Cannot read property 'value' of undefined`
Так что я, очевидно, передаю ему неправильный тип данных. Я думал, что $("#whatever") ссылается на объект, но я ошибаюсь.
Любые идеи или предложения были бы замечательными, спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте это, чтобы вызвать событие выбора
$("#searchBox").keydown(function (event) {
if (event.keyCode == 13) {
$(this).data('ui-autocomplete')._trigger('select', 'autocompleteselect', {item:{value:$(this).val()}});
}
});
Ага, спасибо! Думаю, мне действительно нужно прочитать, как JQuery относится к вещам, спасибо!