Автоматично довършване на jQuery UI: Да се ​​деактивира ли довършването на раздели?

справка

Как мога да деактивирам използването на клавиша 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

Tab всъщност не избира текущия елемент, той премества курсора към следващия елемент с възможност за разделяне. Така че това, което трябва да направите, е да деактивирате раздела за автоматично довършване:

Да се ​​заключи ли раздела с javascript?

Нещо подобно работи за мен, може да се наложи да го промените още малко.

http://jsfiddle.net/Uubn6/

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

person zsalzbank    schedule 23.06.2011
comment
Това не звучи правилно. Ако събитието за замъгляване е задействало събитието за избор (фокусиране на следващия елемент чрез табулация), тогава то също ще се задейства, когато щракна върху друг елемент, но това не се случва. Освен това във вашата цигулка ми пречите да премина към следващия елемент, което е точно обратното на това, което искам. Искам да мога да преминавам към следващия вход без да задействам избор. - person mpen; 23.06.2011