Я пытаюсь определить рабочий процесс для точной настройки веб-приложения для ввода данных. Изобразите несколько адресных форм на одной веб-странице:
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
, в котором отображается ложное значение SwitchAddressesWithTab
и изменяется currentAddress (это плохо ). При запуске обработчика щелчка
запись lastAddressRecord
портится.
Есть ли способ внутри обработчика focus
узнать о наличии ожидающего события click
для того же объекта? Или в обработчике щелкните
, чтобы узнать, что ранее он был обработан только focus
?