JQuery Автозаполнение проблема плагин - PullRequest
3 голосов
/ 05 июня 2009

У меня есть требование в моем проекте предоставить функцию автозаполнения для текстового поля, подобного тому, которое недавно применялось в Google. Мне нужно получать данные при каждом нажатии клавиши, поэтому я вызываю функцию jQuery при нажатии клавиши. Проблема в том, что функция автозаполнения запускается по щелчку мыши в текстовом поле, а не по нажатию клавиши. Я приложу фрагмент кода для лучшего понимания проблемы, которая выглядит следующим образом

$(document).keypress(function(){ 
    lastKey = String.fromCharCode(window.event.keyCode); 
    alert('lastKey :: ' + lastKey);
    var txtVal = document.frm.selectedTechParamName.value + lastKey; 
    alert('txtVal :: ' + txtVal); 
    $("#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete?userAction=getTechParamsForSvcLvlDataID&txtVal=' + txtVal, { 
        matchContains: true, 
        minChars: 0, 
        cacheLength:0, 
        maxItemsToShow:10
    }); 
}); 

Теперь, что происходит, когда любая клавиша нажата, оповещения работают нормально, но вторая половина функции, т. Е.

$("#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete?userAction=getTechParamsForSvcLvlDataID&txtVal=' + txtVal, { 
    matchContains: true, 
    minChars: 0, 
    cacheLength:0, 
    maxItemsToShow:10
}); 

вызывается при нажатии на текстовое поле. Кроме того, как вы можете видеть, атрибут «cacheLength: 0», который я написал, заключается в том, что я не хочу, чтобы автозаполнение кэшировало какие-либо данные, но это также не работает.

Ответы [ 3 ]

2 голосов
/ 05 июня 2009

Похоже, что вы используете JQuery плагин для достижения этой цели. Я использую один и тот же плагин и каждый раз, когда нажимается клавиша, он отправляет новый Ajax-запрос на сервер.

Вы упомянули, что вы устанавливаете cacheLength на 0, в соответствии с документами , значение должно быть >= 1. Вы пытались изменить это, чтобы увидеть, изменит ли это поведение?

Редактировать 1: Также, согласно документам, matchContains: true полезно, только если у вас есть cacheLength > 1 (cacheLength = 1 означает отсутствие кэширования, по умолчанию cacheLength = 10).

1 голос
/ 12 июня 2009

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

$(document).ready(function() {
    $("#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete', {
        extraParams: { userAction: 'getTechParamsForSvcLvlDataID'
                     }
    });
});
1 голос
/ 05 июня 2009

Попробуйте отменить привязку события click из текстового поля, к которому вы прикрепили свой автозаполнитель:

$( "#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete?userAction=getTechParamsForSvcLvlDataID&txtVal=' + txtVal, {
    matchContains: true,
    minChars: 0, cacheLength:0, maxItemsToShow:10
}).unbind("click");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...