Обновление : после более тщательного изучения документации я обнаружил:
Руководство по запуску Typeahead
события
Каждый события Typeahead
могут контролироваться сценарием, а не только взаимодействием с пользователем. Все они требуют выполнения набора условий. Точные условия можно отследить внутри функции DelegateEvents ().
// Events
'focus.typeahead',
'input.typeahead',
'propertychange.typeahead',
'keydown.typeahead',
'dynamic.typeahead',
'generateOnLoad.typeahead'
// Trigger a manual search from the string inside the input
// See #Game_v3 demo to understand why it is being used at that place
$('#mySearchInput').trigger('input.typeahead');
Документация не является исчерпывающей. В событии propertychange.typeahead
нет ничего, кроме его имени и «набора условий для выполнения». Поэтому я все еще не могу сказать с уверенностью 100%, но это также должно работать (работает на демонстрационной странице):
$("#txtSearchProduct").val("")
$("#txtSearchProduct").trigger('propertychange.typeahead');
И это не нарушает инкапсуляцию.
Оригинальный ответ: Я не вижу ничего о вашем деле в документации. Но в исходном коде Typeahead вы можете видеть это:
$("<span/>", {
class: this.options.selector.cancelButton,
html: "×",
mousedown: function (e) {
// Don't blur the input
e.stopImmediatePropagation();
e.preventDefault();
scope.resetInput();
scope.node.trigger("input" + scope.namespace, [e]);
}
}).insertBefore(this.node);
, где scope
является Typeahead
объектом для ввода. Итак, я попробовал это:
const typeahead_for_input = window.Typeahead[".js-typeahead-country_v1"]
typeahead_for_input.resetInput()
// clears input and reset some internal variabales
typeahead_for_input.node.trigger("input" + typeahead_for_input.namespace, []) // no event
// Hides "cancel" button, and maybe a lot more - haven't looked into
в консоли браузера на странице demo , и, насколько я мог заметить, все работало нормально. В вашем случае вы должны получить доступ к Typeahead
объекту вашего ввода с помощью этого:
const typeahead_for_input = window.Typeahead[".txtSearchProduct"]
Конечно, этот подход нарушает инкапсуляцию. Но либо это, либо вы должны попросить функцию у авторов от Typeahead и ждать. Поскольку простой очистки входного значения недостаточно - вам необходимо правильно очистить состояние объекта Typeahead
.
Другой способ: или вы можете просто имитировать события клавиатуры. Установите фокус на входе и отправьте один <Esc>
, который должен это сделать.