2015-03-17 2 views
0

Я пытаюсь изменить строчные буквы в верхнем регистре, когда пользователь вводит в поле ввода. Затем значение поля ввода будет использоваться как ключевое слово для поисковой системы typeahead.Как изменить входное значение перед отправкой в ​​twitter typeahead search engine

Проблема заключается в том, что когда я добавляю прослушиватель событий для typeahead, значение ввода меняется как на верхний, так и на нижний регистр введенной буквы.

$(document).ready(function(){ 
var suggestionsArray = ["audi", "porsche", "pagani", "mercedes benz", "bmw" , "bugatti"]; 
var descs = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    local: $.map(suggestionsArray, function(desc) { return { value: desc }; }) 
}); 

var quicksearchInput = $("#in"); 

// kicks off the loading/processing of `local` and `prefetch` 
descs.initialize(); 

quicksearchInput.on('keypress', function(event) { 
    var val = this.value; 
    event = event || window.event; 

    var charCode = typeof event.which == "number" ? event.which : event.keyCode; 
    if (charCode && charCode != 13 && charCode != 32 && charCode != 8) {   

     var keyChar = String.fromCharCode(charCode).toUpperCase(); 

     var mappedChar = keyChar;   

     var start, end; 
     if (typeof this.selectionStart == "number" && typeof this.selectionEnd == "number") { 
      start = this.selectionStart; 
      end = this.selectionEnd; 
      this.value = val.slice(0,start) + mappedChar + val.slice(end); 

      this.selectionStart = this.selectionEnd = start + 1; 
      $("#dbekar").typeahead('val', this.value); 

     } 
    } 
}) 
.typeahead({ 
    hint: true, 
    highlight: true, 
    minLength: 0 
}, { 
    name: "noname", 
    displayKey: "value", 
    source: descs.ttAdapter(), 
    templates: { 
     empty: [ 
      '<div class="empty-message">', 
      'No matching results found', 
      '</div>' 
     ].join('\n') 
    } 
    }); 
}); 

Здесь jsfiddle

ответ

1

Я нашел решение моей проблемы. Я удалил обработчик события для ввода, добавил пользовательскую функцию источника и манипулировал переменной запроса для typeahead, чтобы сменить буквы на верхний регистр.

$(document).ready(function(){ 
var suggestionsArray = ["audi", "porsche", "pagani", "mercedes benz", "bmw" , "bugatti"]; 
var descs = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    local: $.map(suggestionsArray, function(desc) { return { value: desc }; }) 
}); 

var quicksearchInput = $("#in"); 

// kicks off the loading/processing of `local` and `prefetch` 
descs.initialize(); 

quicksearchInput.typeahead({ 
    hint: true, 
    highlight: true, 
    minLength: 0 
}, { 
    name: "noname", 
    displayKey: "value", 

    source: function (query, cb) { 
     query = query.toUpperCase(); 
     $("#in").typeahead('val', query); 
     descs.get(query, function (suggestions) { 
      cb(suggestions.slice(0, 5)); 
     }); 
    }, 

    templates: { 
     empty: [ 
      '<div class="empty-message">', 
      'No matching results found', 
      '</div>' 
     ].join('\n') 
    } 

    }); 
}); 

Решение здесь jsfiddle

Смежные вопросы