#javascript #jquery #autocomplete #typeahead.js #typeahead
#javascript #jquery #автозаполнение #typeahead.js #typeahead
Вопрос:
Я использую typeahead для извлечения предложений из базы данных с помощью приведенного ниже кода, они доставляются в виде массива объектов, и я добавляю первое значение в предложение, а затем мне нужно, чтобы второе выводилось как класс вокруг результата.
Например, span class=»flag-{val 1}»> Предложение
Любая помощь с благодарностью.
$('#typeahead').typeahead(null, {
source: function(query, process) {
$.ajax({
url: 'source.php',
type: 'POST',
data: 'query=' query,
dataType: 'JSON',
async: true,
success: function (data) {
var suggestions = [];
$.each(data, function(key, val) {
var obj = {};
obj.label = val;
suggestions.push({ value: val[0] });
console.log( {value: val[0]}, {value: val[1]});
});
return typeof data == 'undefined' ? false : process(suggestions);
}
});
}
});
Комментарии:
1. вы изучали пользовательские шаблоны на twitter.github.io/typeahead.js/examples
2. @DaveBriand У меня есть спасибо — не успокоил, дал мне то, что мне было нужно, но теперь нашел хорошее простое решение. Спасибо
3. приятно слышать — я вижу ваш ответ ниже.
Ответ №1:
Я использую undercorejs для создания шаблонов, это добавляет функцию компиляции к подчеркиванию. Typeaheadjs использует компиляцию при сборке из шаблонов.
_.compile = function(templ) {
var compiled = this.template(templ);
compiled.render = function(ctx) {
return this(ctx);
}
return compiled;
}
Согласно примерам на странице github, теперь вы можете использовать шаблоны.
Комментарии:
1. Спасибо, Дэйв, к сожалению, шаблоны все еще не укладываются у меня в голове. Мне удалось удалить теги span перед вставкой all be it с очень сложным таймаутом при размытии, чтобы это сработало. Обновил мой ответ, чтобы показать.
Ответ №2:
По дороге домой с работы мне пришло в голову, что я мог бы попробовать это:
suggestions.push({ value: '<span class="flag flag-' val[1] '">' val[0] '</span>' });
и на самом деле не нужно было бы усложнять ситуацию, изменяя шаблоны typeahead. Это работает! 🙂
В дополнение к этому — добавляя разметки диапазона во входные данные, я создал функцию для их удаления… $(document).on(‘нажать клавишу : фокус: активный’, ‘.tt-предложение’, функция (e){ cleanSuggestion (); e.preventDefault(); });
$(document).on('keydown', '.tt-input, .typeahead, .tt-hint', function(e){
if(e.which == 38||e.which == 40||e.which == 13) {
cleanSuggestion ();
}
});
$(document).on('blur', '.tt-input', function(e){
setTimeout(function(){
cleanSuggestion ();
}, 1);
});
function cleanSuggestion () {
var registeredValue = $('#registered-stallion').attr('value')
registeredValue = registeredValue.replace(/(<([^>] )>)/ig,"");
$('#registered-stallion').attr('value', registeredValue);
}
по какой-то причине функция размытия будет работать только с тайм-аутом, так как я не мог точно видеть, где typeahead повторно использовал свою функцию здесь..
Комментарии:
1. ах, за исключением… при щелчке span вставляется в предложение. <span> фрэнк</span>
2. возможно, вы захотите рассмотреть возможность создания небольшого механизма шаблонов и его использования — я опубликую его в ответе, чтобы его можно было отформатировать
3. Спасибо @DaveBriand, если у вас есть время, чтобы смоделировать пример, я был бы очень признателен, мне пока не очень повезло с шаблонизацией — возможно, я пропустил что-то очевидное.