Я пытаюсь определить рабочий процесс для тонкой настройки веб-приложения ввода данных. Изобразите несколько адресных форм на одной веб-странице:
1. Name___________
Street_________
Phone__________
2. Name___________
Street_________
Phone__________
[...many more...]
Теперь я хотел бы знать, использует ли пользователь клавишу табуляции для перехода ко второму полю «Имя» (или где-либо в этой записи), или же он щелкает по нему мышью. (Или Shift-Tab для перемещения в обратном направлении.)
Я установил обработчик на оба фокуса и щелкнул по полям ввода:
$('input').click(function() { TabulateClick(this) });
$('input').focus(function() { TabulateFocus(this) });
И в обработчике я определяю, по какому адресу работает пользователь и «переключили» ли мы записи адресов. (Если фокус был в «Телефон» для первого адреса, и вы нажимаете на поле «Имя» в тот же адрес , это на самом деле не переключает записи, поэтому я не собираю это в таблице.)
function TabulateClick(field)
{
var currentAddressRecord = FindAddress(field);
if ( lastAddressRecord != currentAddressRecord )
switchedAddressesWithClick++;
lastAddressRecord = currentAddress;
}
function TabulateFocus(field)
{
var currentAddress = FindAddress(field);
if ( lastAddressRecord != currentAddressRecord )
switchedAddressesWithTab++;
lastAddressRecord = currentAddress;
}
Моя проблема в том, что когда я щелкаю мышью в поле, событие focus
запускается, сначала табулируя ложное значение switchedAddressesWithTab
и изменяя currentAddress (это bad ). Когда запускается обработчик click
, lastAddressRecord
портится.
Есть ли способ внутри обработчика focus
узнать, что на том же объекте есть ожидающее событие click
? Или в обработчике click
, чтобы узнать, что ранее он был обработан focus
?