Я пытался создать свой собственное расширенное окно поиска с предопределенными фильтрами, которые пользователь может выбрать, а затем добавить к ним. Например, у меня есть список фильтров поиска: «Начинается с:», «Содержит текст:» и т. д., которые отображаются в виде предложений. Идея состоит в том, что пользователь выбирает «Начинается с:», что создает тег, затем вводит критерий поиска «тест» и нажимает Enter, два созданных тега объединяются в один тег «Начинается с: тест». функция работает так, как и ожидалось, за исключением того, что как только я нажимаю где-нибудь еще, текст «тест» снова появляется в поле поиска.
Функция, которую я создал для объединения фильтров, приведена ниже, чтобы будьте проще: все фильтры заканчиваются знаком ":"
Код: Выделить всё
function combineSearchTags(elementID) {
modifyingSearchTags = true;
var value = $("#" + elementID).val();
var parts = value.split(",");
if(parts.length > 1) {
// loop through parts and check for uncombined filter tags (ends with ":")
for (let i = 0; i < parts.length; i++) {
if(parts[i].endsWith(":") && typeof parts[i+1] !== "undefined") {
if(parts[i+1].endsWith(":")) {
// two filters in a row, remove the first one
$("#" + elementID).tagsinput('remove', parts[i]);
} else {
// combine two tags
var combinedTag = parts[i] + " " + parts[i+1];
$("#" + elementID).tagsinput('remove', parts[i]);
$("#" + elementID).tagsinput('remove', parts[i+1]);
$("#" + elementID).tagsinput('add', combinedTag);
}
// in either case remove remaining text from input
$("#" + elementID).prev().find(".tt-input").val("");
}
}
}
$("#" + elementID).tagsinput('refresh');
modifyingSearchTags = false;
return true;
}
Код: Выделить всё
$("#" + elementID).prev().find(".tt-input").val("");Код: Выделить всё
$("#" + elementID).tagsinput('refresh');Если это помогает, я запускаю функцию при добавлении тегов и имею переменную, которая предотвращает возникновение цикла, поскольку она запускается при добавлении тега, но затем также добавляет тег:
Код: Выделить всё
$('#searchBar').on('itemAdded', function(event) {
if(!modifyingSearchTags) {
combineSearchTags("docSearch");
}
});
Подробнее здесь: https://stackoverflow.com/questions/793 ... is-created
Мобильная версия