Событие автозаполнения JQuery с новым значением - PullRequest
1 голос
/ 18 января 2011

У меня есть следующий код:

container.autocomplete({
        minLength: 2,
        source: function(request, response) {
                $.ajax({
                    type : 'POST',
                    url: HOST + "/lib/gets/getjsonclients.php",
                    dataType: "json",
                    data: {
                        q: request.term
                    },
                    success: function(data) {
                        ajaxCache[cachedTerm] = data;
                        response($.map(data, function(item) {
                            return {
                                label: item.value,
                                value: item.value
                            }
                        }));
                    }
                });
        },
        select: function(event, ui) {
            alert(ui.item.value);
            this.close
        },

        //change: function(event, ui) {
        //   alert($(this).val());
        //}, 

        open: function() {
        },

        close: function() {
        }
 });

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

Я пытался использовать событие .result, но у меня ошибка: Uncaught TypeError: У объекта # нет метода 'result' с использованием кода:

    container.result(function(event, data, formatted) {
        alert($(this).val());
    });

Изменение: событие работает нормально, но запускается только после того, как я теряю фокус на автозаполнении, и мне нужно это сделать, когда я нажимаю клавишу ввода

Спасибо за ваши ответы.

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Я использую это решение. Однако, если есть способ отменить действие одного события во время его срабатывания и снова активировать событие, пожалуйста, дайте мне знать.

  var oneEventFired = false;
  container.autocomplete({
        minLength: 2,
        source: function(request, response) {
                $.ajax({
                    type : 'POST',
                    url: HOST + "/lib/gets/getjsonclients.php",
                    dataType: "json",
                        data: {
                        q: request.term
                    },
                    success: function(data) {
                        ajaxCache[cachedTerm] = data;
                        response($.map(data, function(item) {
                            return {
                                label: item.value,
                                value: item.value
                            }
                        }));
                    }
                });
        },
        select: function(event, ui) {
            oneEventFired = true;
            alert(ui.item.value);
            this.close
        },    
        open: function() {
        },    
        close: function() {
        }
 })
 .keypress(function(e) {
        if (!oneEventFired) {
            // activate when the enter key is hit
            if (e.keyCode === 13) 
            {
                alert("key" + $(this).val());
            }
        } else {
            oneEventFired = false;
        }
 });

Спасибо за вашу помощь!

2 голосов
/ 18 января 2011

Вы должны привязать контейнер к нажатию клавиши и поймать клавишу ввода (не проверено, но должно работать):

$(container).keypress(function(event) {
    if(event.which == 13) {
        $(this).autocomplete('search');
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...