2013-07-31 2 views
0

Если у меня есть текстовое поле с зарегистрированным обработчиком событий onblur и кнопкой с зарегистрированным обработчиком событий onmouseup, какая из этих двух функций будет работать раньше и почему?JavaScript Event Handler Race

Чтобы сделать мой вопрос более ясным, давайте предположим, что в настоящее время фокус находится в текстовом поле, и я хочу нажать на кнопку.

Будет ли разница между различными интернет-браузерами?

Редактировать

Особенно сложно кажется onmousedown события, когда он зарегистрирован с помощью кнопки, в то время как текстовое поле имеет onblur событие зарегистрированного с ним.

+0

Примечание: * В отличие от MSIE, в котором почти все элементы получают событие размытия - почти все виды элементов в браузерах Gecko НЕ работают с этим событием. * Ссылка: https: //developer.mozilla .org/en-US/docs/Web/API/GlobalEventHandlers.onblur – Raptor

+0

@ShivanRaptor: Текстовые поля, однако, делают. –

+0

Моя ошибка, я имел в виду событие 'onmouseup'. :-) – Luka

ответ

2

The spec says должен быть уволен, когда фокус покидает элемент (после снятия фокуса), но я не вижу явного утверждения о том, когда это должно произойти относительно события, вызывающего удержание фокуса.

Конечно, mouseup произойдет гораздо позже (в компьютерных терминах), так как сначала вы должны mousedown.

я ожидал бы blur огонь до даже mousedown, но я был бы неправ: Согласно experimentation, mouseup после, но mousedown это раньше. Я тестировал, что с помощью Chrome 26, Opera 12.15, Firefox 20, IE8 и IE9   —, и если вы можете получить эти пять, чтобы согласиться на поведение, это, вероятно, будет последовательным в других ... :-) Мое подозрение в том, что это потому что, если вы предотвращаете действие по умолчанию mousedown, фокус никогда не отходит от текстового поля: Example. (Это поведение согласовано между четырьмя этих пяти браузеров, IE8 не препятствует изменению фокуса   — означает, что IE7 и 6, вероятно, тоже этого не делают.) Таким образом, хотя это кажется странным, это имеет смысл.

Как всегда, проверьте браузеры, которые вы собираетесь поддерживать.

+0

Да, onmousedown пожары до размытия, в моем хром также. –

-1

Просто сохраните метку времени при запуске

var start = new Date().getTime(); 

, а затем

var elapsed = new Date().getTime() - start; 

в обработчик.

+0

Не совсем связано. 'console.log()' на обоих событиях уже выполнил задание. – Raptor

 Смежные вопросы

  • Нет связанных вопросов^_^