jQuery UI Autocomplete: отключить автозаполнение вкладок?

ссылка

Как отключить использование клавиши Tab для выбора текущего/выделенного элемента? Я только хочу, чтобы Enter заполнил его.


person mpen    schedule 23.06.2011    source источник


Ответы (3)


пример Райана с размещением отмены в событии keypress не У меня это не работает, но мы можем поместить его в опцию select автозаполнения:

select: function(e, ui) {
    if(e.keyCode === 9) return false;
    // other code...
}
person mpen    schedule 23.07.2011

Когда вы используете модификатор .autocomplete() в jquery-ui, он устанавливает обработчик нажатия клавиши для вашего текстового поля ввода следующим образом. self.menu.select устанавливает текстовое поле на текущее выделенное значение в списке автозаполнения.

.bind( "keydown.autocomplete", function( event ) {
...
switch( event.keyCode ) {
...
case keyCode.TAB:
    if ( !self.menu.active ) {
       return;
    }
    self.menu.select( event );
    break;
...
    }
}

Итак, что вам нужно сделать, это убедиться, что этот обработчик не вызывается. Я смог сделать это, добавив обработчик нажатия клавиши, который возвращает false из обработчика, если нажатие клавиши TAB.

$( "#tags" ).autocomplete({
        source: availableTags
    });
$("#tags").keypress(function(e){
    if(e.keyCode == keyCode.TAB) {
        e.stopImmediatePropagation();
    }
});

Вы можете увидеть результат здесь.

person Ryan Gross    schedule 23.06.2011
comment
забыл включить jquery ui в jsfiddle. Я сделал, и это не сработало для меня. - person zsalzbank; 23.06.2011
comment
Я только что обновил ссылку. Теперь он должен указывать на jsfissle, который включает библиотеку jquery-ui. - person Ryan Gross; 23.06.2011
comment
Это работает, когда мы добавляем библиотеку (jsfiddle.net/mnbayazit/TmZVw/3), но окно остается открытым (плохо!). Кроме того, ваша скрипка полностью расходится с тем, что вы написали в своем ответе (вы не связали размытие). - person mpen; 23.06.2011
comment
Видимо, я борюсь со ссылками на скрипку... позвольте мне попытаться понять это - person Ryan Gross; 23.06.2011
comment
ОК... Я исправил ссылку и сделал так, чтобы всплывающее окно не оставалось. Я почти уверен, что теперь у него именно то поведение, которое вы искали. - person Ryan Gross; 23.06.2011
comment
@Ryan: Это не имеет особого смысла, если фокус не отключен, иначе ввод уже содержит полный текст. jsfiddle.net/AhUq7/7, кажется, запрещает вкладку, но параметр autoFocus (выбирает первый элемент) вроде уже не работает... - person mpen; 24.07.2011
comment
Я предположил, что вас беспокоит случай, когда чья-то мышь находилась над областью, где появилось всплывающее окно, что вызывало непреднамеренный выбор, когда они нажимали вкладку мимо поля. - person Ryan Gross; 24.07.2011

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

Заблокировать клавишу табуляции с помощью javascript?

Что-то вроде этого работает для меня, возможно, вам придется изменить его еще немного.

http://jsfiddle.net/Uubn6/

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

person zsalzbank    schedule 23.06.2011
comment
Это звучит неправильно. Если бы это было событие размытия, которое запускало событие выбора (фокусировка на следующем элементе через вкладку), то оно также срабатывало бы, когда я щелкал другой элемент, но этого не происходит. Кроме того, в вашей скрипке вы не позволяете мне перейти к следующему элементу, что является полной противоположностью тому, что я хочу. Я хочу иметь возможность перейти к следующему вводу без запуска выбора. - person mpen; 23.06.2011