Входной текст тегов Bootstrap возвращается на вход после создания тегаJquery

Программирование на jquery
Ответить
Anonymous
 Входной текст тегов Bootstrap возвращается на вход после создания тега

Сообщение Anonymous »

Я использую ввод тегов начальной загрузки и столкнулся с проблемой: после создания тега ранее введенный текст возвращается в поле поиска при изменении фокуса.
Я пытался создать свой собственное расширенное окно поиска с предопределенными фильтрами, которые пользователь может выбрать, а затем добавить к ним. Например, у меня есть список фильтров поиска: «Начинается с:», «Содержит текст:» и т. д., которые отображаются в виде предложений. Идея состоит в том, что пользователь выбирает «Начинается с:», что создает тег, затем вводит критерий поиска «тест» и нажимает 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;
}
Использование функций tagsinput для удаления обоих тегов и добавления нового комбинированного должно быть всем, что мне нужно сделать, и сначала все выглядит нормально, но как только я нажимаю где-нибудь еще, предыдущий текст снова появляется в строке поиска. Я попытался вручную удалить текст из текстового ввода с помощью этой строки, но текста нет, пока фокус не перейдет на что-то другое после добавления тегов.

Код: Выделить всё

$("#" + 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»