Событие размытости мешает событию щелчка работать?

Кажется, что событие Blur мешает обработчику события Click работать? У меня есть поле комбинированного списка, где опции только появляются, когда текстовое поле фокусируется. Выбор ссылки опции должен заставить событие происходить.

У меня есть пример скрипки здесь: http://jsfiddle.net/uXq5p/6/

Воспроизвести:

  1. Выберите текстовое поле
  2. Ссылки появляются
  3. Нажмите на ссылку
  4. Размытость даже происходит, и ссылки исчезают
  5. Ничего иного не происходит.

Ожидаемое поведение:

На шаге 5, после того, как происходит размытость, щелчок даже должен также затем стрелять. Как я заставляю это произойти?

ОБНОВЛЕНИЕ:

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

Например:

$('#ShippingGroupListWrapper').css('left','-20px');

работает просто великолепно, но

$('#ShippingGroupListWrapper').css('left','-2000px');

предотвращает событие щелчка.

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

Другие вещи, которые препятствуют тому, чтобы событие щелчка обработало:

$('#ShippingGroupListWrapper').css('z-index','-20');
$('#ShippingGroupListWrapper').css('display','none');
$('#ShippingGroupListWrapper').css('visibility','hidden');
$('#ShippingGroupListWrapper').css('opacity','.5');

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

  1. Используйте задержку. Это плохо, потому что это создает состояние состязания между сокрытием и обработчиком события Click. Его также неаккуратный.

  2. Используйте mousedown событие. Но это не отличное решение ни один с тех пор click корректное событие для ссылки. Поведение mousedown парадоксально с точки зрения UX, особенно так как Вы не можете отменить щелчок путем перемещения мыши от элемента прежде, чем отпустить кнопку.

Я могу думать о еще много.

3. Использовать mouseover и mouseout на ссылке для позволения/запрещения события размытости для поля. Это не работает с клавиатурой, снабжающей вкладками, так как мышь не включена.

4. Лучшее решение было бы чем-то как:

$('#ShippingGroup').blur(function()
{
   if($(document.activeElement) == $('.ShippingGroupLinkList'))
      return; // The element that now has focus is a link, do nothing
   $('#ShippingGroupListWrapper').css('display','none'); // hide it.
}

К сожалению, $(document.activeElement) кажется, всегда возвращает элемент тела, не тот, который был нажат. Но возможно если был надежный способ знать любой 1. какой элемент теперь фокусируется или два, какой элемент вызвал размытость (не, какой элемент размывается) из обработчика размытости. Кроме того, есть ли любое другое событие (кроме того, mousedown) это стреляет перед размытостью?

61
задан 18 February 2012 в 08:21

1 ответ

Я знаю, что это - более поздний ответ, но у меня была эта та же проблема, и много этих решений действительно не работало в моем сценарии. mousedown не функционально с формами, это может заставить функциональность клавиши Enter изменяться на кнопке отправки. Вместо этого можно установить переменную _mouseclick верный в эти mousedown, проверить его в эти blur, и preventDefault(), если это верно. Затем в эти mouseup устанавливает переменную ложь. Я не видел проблемы с этим, если кто-то не может думать ни о ком.

0
ответ дан 31 October 2019 в 16:09

Другие вопросы по тегам:

Похожие вопросы: