【发布时间】:2011-02-03 17:18:28
【问题描述】:
我正在尝试确定工作流程以微调数据输入 Web 应用程序。在一个网页上绘制多个地址表单:
1. Name___________
Street_________
Phone__________
2. Name___________
Street_________
Phone__________
[...many more...]
现在我想知道用户是否使用 Tab 键进入第二个“名称”字段(或该记录中的任何位置),或者他们是否使用鼠标单击它。 (或 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(这是坏)。当click 处理程序运行时,lastAddressRecord 被破坏了。
focus 处理程序内部是否有办法知道同一对象上存在待处理的click 事件?或者在click 处理程序中知道它以前只是由focus 处理的?
【问题讨论】:
标签: javascript jquery events focus mouse