2010-07-28 4 views
8

Я использовал jquery-ui для автозаполнения окна ввода и установки скрытого значения из выбранного элемента.jquery-ui autocomplete не выбирается при вводе

Это я сделал с помощью опции

select: function(event, ui) { ...$("#myDiv").val(ui.item.value)... } 

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

Это работает, когда выберите элемент из меню с помощью мыши, однако, если я просто введу какой-то текст и выберем элемент с помощью Enter - он ничего не сделает, это значит, что функция select не запускается функцией автозаполнения. Тем не менее, табуляция из коробки вызывает выбор.

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

спасибо.

rofly: Я использую JQuery-UI автозаполнения, то есть код, вы даете, но это выглядит следующим образом (от jquery.ui.autocomplete.js)


case keyCode.ENTER: 
       case keyCode.NUMPAD_ENTER: 
        // when menu is open or has focus 
        if (self.menu.active) { 
         event.preventDefault(); 
        } 
        //passthrough - ENTER and TAB both select the current element 
       case keyCode.TAB: 
        if (!self.menu.active) { 
         return; 
        } 
        self.menu.select(event); 
        break; 

Это выглядит все денди, поэтому я не уверен, что из-за этого он терпит неудачу.

Мой код выглядит так (завернутый в document.read()

$("#someDiv").attr("autocomplete", 'off'); 
$("#someDiv").autocomplete({ 
source: function(request, response) { 
if (request.term in cache) { 
response(cache[ request.term ]); 
return; 
} 
$.ajax({ 
url: "giveMeJSON.jsp", 
dataType: "json", 
data: request, 
success: function(data) { 
cache[ request.term ] = data; 
response(data); 
} 
})}, 
minLength: 1, 
delay: 300, 
select: function(event, ui) { 
$("#someDiv").val(ui.item.label); 
$("#hiddenDiv").val(ui.item.value); 
} 
});

так, проблема в том, что это работает, когда пользователь выбирает из меню с помощью мыши и при обходе из поля (keyUp, keyDown, чтобы выбрать вкладку, работает), но keyUp, keyDown, чтобы выбрать itme, затем введите, и ничего не произойдет!

+0

если установить скрытый вход имеет странный идентификатор 'myDiv' .... возможно' изменения: функция (событие, щ) {... $ ("# myDiv"). val (ui.item.value) ...} 'works – Ties

ответ

6

Аналогичный экземпляр работает для меня с jQuery 1.4.2 и jQuery-ui 1.8.7. Если вы создаете новую запись, которая не существует, нажатие клавиши «Ввод» не вызывает выбор или изменение событий. Мне нужно было b ind отдельный обработчик события, чтобы заставить эту ситуацию летать.

+1

Вот точный код, который я использую для захвата клавиши Enter. $ ("# YourAutoComplete") нажатие клавиши (функция (е) { \t если (e.which == 13) { yourFunction ($ ('# yourAutoComplete') Вал());.. возвращение ложным; \t} \t} Надеюсь, что это поможет! – JeffSea

+0

Посмотрите на ответ @iamct! Автофокус заставляет первый элемент иметь фокус, и, таким образом, клавиша выбирает его! –

2

Это сработало для меня, когда я отправлял форму после автоматического завершения.

$("input#searchbox").autocomplete({ 
    source: autocomplete, 
    select: function(event, ui) { } 
    $("input#searchbox").val(ui.item.value); 
    $("#searchform").submit(); 
    } 
}) 

От Search on Click with Jquery's Autocomplete

1

имеет эти параметры? установить
Автофокус: истинный

Посмотреть ответ здесь: https://stackoverflow.com/a/9243511/74585

+1

Это было именно то, что я искал, стыдно, что это не принятый ответ! –