Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработчики onclick и onblur - что раньше? (https://javascript.ru/forum/events/34970-obrabotchiki-onclick-i-onblur-chto-ranshe.html)

vladimir777 26.01.2013 11:15

Обработчики onclick и onblur - что раньше?
 
Добрый день!

Есть некий плагин на jquery, одна из разновидностей autocomplete.
Суть плагина - организация быстрого поиска с подсказками, по типу яндекс-формы поиска.

На инпут вешается обработчик .blur для скрытия дива с найденными подсказками при потере фокуса инпутом.

В диве с подсказками выводятся ссылки, полученные ajax, на найденные результаты.

При клике по этим ссылкам, переход осуществляется через раз - то просто скрывается див с подсказками, то идет переход по ссылке.

Вопрос в следующем - это конфликт обработчиков? Как правильно расставить обработку событий, чтобы и blur() работал (пользователь может тыкнуть в любое пустое место и подсказки должны пропасть), и при кликах по ссылкам происходил переход по ним в 100% случаев, а не рандомно?

danik.js 26.01.2013 12:09

Инпут потеряет фокус уже при нажатии кнопки мыши (mousedown), а событие click произойдет только при отпускании (mouseup) . а к тому времени список уже скроется (обработчиком onblur).

Поможет что-то типа
item.addEventListener('mousedown', function(e) { e.preventDefault(); });

vladimir777 26.01.2013 12:57

Цитата:

Сообщение от danik.js (Сообщение 229522)
Инпут потеряет фокус уже при нажатии кнопки мыши (mousedown), а событие click произойдет только при отпускании (mouseup) . а к тому времени список уже скроется (обработчиком onblur).

Поможет что-то типа
item.addEventListener('mousedown', function(e) { e.preventDefault(); });


спасибо, попробовал. Событие на onblur при любых раскладах продолжает работать.. но пока переход по ссылке происходит, сбоев не видел

работать addEventListener в IE не будет? (работаю из-под линухи, проверить не могу)

danik.js 26.01.2013 13:32

В IE6-8 нету addEventListener. Либо пишем простую обертку для кроссбраузерного навешивания обработчиков, либо пользуемся либой товарища devote: https://github.com/devote/spike

blur и должен происходить, но теперь не по mousedown а по click, что и требовалось.


Часовой пояс GMT +3, время: 02:57.