Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2013, 13:15
Новичок на форуме
Отправить личное сообщение для vladimir777 Посмотреть профиль Найти все сообщения от vladimir777
 
Регистрация: 26.01.2013
Сообщений: 2

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

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

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

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

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

Вопрос в следующем - это конфликт обработчиков? Как правильно расставить обработку событий, чтобы и blur() работал (пользователь может тыкнуть в любое пустое место и подсказки должны пропасть), и при кликах по ссылкам происходил переход по ним в 100% случаев, а не рандомно?
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2013, 14:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Поможет что-то типа
item.addEventListener('mousedown', function(e) { e.preventDefault(); });
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2013, 14:57
Новичок на форуме
Отправить личное сообщение для vladimir777 Посмотреть профиль Найти все сообщения от vladimir777
 
Регистрация: 26.01.2013
Сообщений: 2

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

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

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

работать addEventListener в IE не будет? (работаю из-под линухи, проверить не могу)
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2013, 15:32
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, что содержит onClick? PHPNoob Events/DOM/Window 3 17.07.2015 12:20
Как (эффективно) изучать JavaScript? JSTalker Общие вопросы Javascript 33 23.12.2010 03:13
Zend и Pear для нуба mycoding Серверные языки и технологии 52 13.12.2010 18:32
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 19:03
Браузер доказывает что не видит функцию SleepWalker Общие вопросы Javascript 7 17.06.2009 23:14