Как я могу изменить введенный текст перед соответствием - PullRequest
0 голосов
/ 13 мая 2009

У меня есть поле jQuery.autocomplete, представляющее ограниченный диапазон десятичных чисел. Пример:

var the_list = ['+2.23', '+1.10', '-1.10', '-2.00', '-3.00',]

Но я разрешаю пользователю вводить данные типа «2.3» и «-5». По крайней мере, я могу получить частичные совпадения, чтобы помочь мне, когда я начну печатать для этих значений.

Но что, если я (или кто-то еще с неуклюжими пальцами) введу «2,3» (с запятой вместо десятичной точки). Как только я нажму на запятую, у меня не будет совпадений. Можно ли это как-то исправить?

Я думал о том, чтобы создать обработчик для keydown . Ведьма заменяет запятую на десятичную точку перед запуском обработчика автозаполнения. Я попытался добавить обработчик событий в поле, но затем автозаполнение перестает работать все вместе, и, похоже, нет способа указать порядок выполнения обработчиков.

Пожалуйста, сообщите мне, как это можно сделать, если это вообще возможно. Любые предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

Предполагается, что вы используете плагин автозаполнения для jquery, найденный здесь: http://www.pengoworks.com/workshop/jquery/autocomplete.htm

Затем измените файл плагина, чтобы изменить это:

    function onChange() {
    // ignore if the following keys are pressed: [del] [shift] [capslock]
    if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide();
    var v = $input.val();
    if (v == prev) return;
    prev = v;
    if (v.length >= options.minChars) {
        $input.addClass(options.loadingClass);
        requestData(v);
    } else {
        $input.removeClass(options.loadingClass);
        $results.hide();
    }
};

к этому:

    function onChange() {
    // ignore if the following keys are pressed: [del] [shift] [capslock]
    if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide();
    var v = $input.val();
            v = fixBadChars(v);
    if (v == prev) return;
    prev = v;
    if (v.length >= options.minChars) {
        $input.addClass(options.loadingClass);
        requestData(v);
    } else {
        $input.removeClass(options.loadingClass);
        $results.hide();
    }
};
    function fixBadChars(v) {
         // Customize this to your tastes
         return v.replace(',','.');
    };

Я просто быстро взглянул на плагин, но думаю / надеюсь, что это сработает ...

// Начало редактирования Различия между ними следующие:

    v = fixBadChars(v);

    function fixBadChars(v) {
         // Customize this to your tastes
         return v.replace(',','.');
    };

// Конец редактирования

Вот ссылка на плагин напрямую: Ссылка: http://www.pengoworks.com/workshop/jquery/lib/jquery.autocomplete.js

0 голосов
/ 19 мая 2009

Большое спасибо DismissedAsDrone, с помощью которого мне удалось заставить мои вещи работать. Однако я внес небольшое изменение в предлагаемое решение, поскольку хотел обновить действительное значение поля ввода, а не только значение, используемое при поиске.

Вот что я сделал

Я начал с этого плагина автозаполнения (v1.0.2) jQuery.

Я добавил параметр preFilter (1 строка кода) к $. Autocompleter.defaults Код объекта как:

$.Autocompleter.defaults = {
    inputClass: "ac_input",
    ...,
    preFilter: function(value) { return value; },
    ...

В функции onChange я добавил использование preFilter (4 строки кода) после строки var currentValue ... :

var currentValue = $input.val();

if ( options.preFilter(currentValue) != currentValue ) {
    $input.val(options.preFilter(currentValue));
    return;
}

Как это использовать

Чтобы использовать новую опцию для решения моей конкретной проблемы, я использовал ее так:

$(function() {
    $("#the_inputfield").autocomplete(the_data, {
        minChars: 0,
        max: 100,
        selectFirst: false,
        matchContains: true,
        preFilter: function(value) { return value.replace(',','.'); },
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...