Событие onBlur, переопределяющее события jQuery UI - PullRequest
3 голосов
/ 25 августа 2010

У меня есть текстовое поле, которое подключено с помощью автозаполнения jQuery UI 1.8.4. У меня есть событие select, поэтому, когда пользователь выбирает элемент из списка, он вызывает другую функцию javascript, которая выдает запрос ajax для сохранения данных и обновления XML-документа.

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

Когда пользователь выбирает элемент из списка автозаполнения, он запускает onBlur, который переопределяет событие select, поэтому обновляются только те данные, которые находятся в текстовом поле, введенном пользователем, и поскольку событие select не выстрелить содержимое текстового поля не обновляются.

Я пытался использовать событие change с теми же результатами.

Есть ли способ обеспечить запуск события select, а также реализовать некоторые функции, которые будут эмулировать onBlur в случае, когда пользователь вводит значение, а не выбирает его?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

Я думаю, что onselect всегда срабатывает "НО" срабатывает только после события onblur текстового поля.

И это происходит только при использовании мышичтобы выбрать автозаполнение элемента, а не путем выбора элемента с помощью клавиатуры.

Вы можете отменить обновление, выполненное на onblur, с событием select в зависимости от того, щелкнул ли щелчок мыши или был сделан выбор с клавиатуры.

select: function (event, ui) {

     if (event.originalEvent.originalEvent.type == 'click') {
          //undo the onblur event happened by an ajax call here
          //$("#txtbox").val() will still be available to do an undo
     }

     //do the actual onselect function here
}
0 голосов
/ 25 августа 2010

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

Если используемый вами элемент управления автозаполнением не имеет методов, чтобы сообщить вам, когда он закрыт, то вы, вероятно, застряли с использованием setTimeout, чтобы немного подождать, прежде чем запустить код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...