Параметр закрытия автозаполнения JQuery при нажатии снаружи

Я хотел бы знать, есть ли способ в автозаполнении JQuery, когда открыты параметры, если я нажму ВНЕШНЮЮ часть окна параметров, чтобы выбрать или нажать ESCAPE на клавиатуре. Он закрывается без необходимости выбора одного варианта.

Кто-нибудь знает правильный способ сделать это? Все еще думал использовать что-то, чтобы проверить, фокусируется ли автозаполнение, если не закрыть его, но это просто ИДЕЯ.

Спасибо


person Ricardo Rodrigues    schedule 13.09.2011    source источник
comment
Разве это не действие по умолчанию? Не могли бы вы перефразировать свой вопрос, так как очень сложно понять, что вам нужно?   -  person William Niu    schedule 13.09.2011
comment
Ну, не совсем, если вы используете Firefox. Перейдите с Firefox и протестируйте этот пример jsfiddle.net/3Yz9f , поместите s и нажмите закрыть. Еще варианты, те же, если нажать ESC.   -  person Ricardo Rodrigues    schedule 13.09.2011
comment
Теперь я знаю, что вы имеете в виду, но вы не упомянули ни слова о диалоге в своем вопросе (кроме тегов....). Смотрите мой ответ ниже.   -  person William Niu    schedule 13.09.2011
comment
Потому что проблема больше в том, чтобы поймать событие вне автозаполнения, и если это так ... закрыть автозаполнение.   -  person Ricardo Rodrigues    schedule 13.09.2011


Ответы (2)


Просто закройте автозаполнение, когда диалоговое окно закрыто:

$("#dialog").dialog({
    close: function() {
        $('#tags').autocomplete('close');
    }
});

Посмотрите это в действии: http://jsfiddle.net/william/3Yz9f/1/.


Обновить

Это зависит от того, что вы подразумеваете под словом «общий». JavaScript очень ориентирован на события. Итак, изначально вы хотите, чтобы автозаполнение закрывалось при закрытии диалога, следовательно, первая часть ответа. Конечно, вы можете привязать его к некоторым косвенным событиям, таким как автозаполнение размытия или скрытия (вам может потребоваться создать специальное событие для скрытия), но это дает вам небольшой риск того, что они могут не сработать, поскольку они косвенные. .

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

Если ваша проблема связана с виджетом автозаполнения по идентификатору, вы можете использовать селектор на основе контекста, например. используйте $('.ui-autocomplete-input', this) вместо $('#tags') в обработчиках событий диалога.

person William Niu    schedule 13.09.2011
comment
Хорошее решение и работает. Смотрел в более общем плане, чтобы определить не в диалоговом окне, чтобы закрыть, а в автозаполнении. - person Ricardo Rodrigues; 13.09.2011
comment
Т.к. решает одну из проблем, например если перетащить диалог, то он не закрывается. - person Ricardo Rodrigues; 13.09.2011
comment
Это решение, о котором я уже думал, но спасибо ... не вижу лучшего способа (пока) без использования функций dragstart и close. Но спасибо - person Ricardo Rodrigues; 14.09.2011
comment
хм... было бы неплохо, если бы вы указали в своем вопросе, что вы пробовали, чтобы сделать этот процесс более эффективным. - person William Niu; 14.09.2011
comment
Я закончил использовать диалоговое окно dragStart и close, автозаполнение close будет работать. Спасибо - person Ricardo Rodrigues; 16.09.2011