【发布时间】:2013-03-28 19:21:15
【问题描述】:
请注意,此问题可能不适用于公众,因为除非您是快速点击者,否则不会发生此问题。 (150-200 毫秒/点击) 我发布此问题的原因是因为我的应用程序有一个包含 20 多个复选框的表单,经过广泛研究,我没有发现与此问题相关的问题。
这是一个简化的场景 - 4 个复选框和 4 个标签,每个复选框 id 一个:
[CB1] Label 1
[CB2] Label 2
[CB3] Label 3
[CB4] Label 4
假设在每种情况下所有 CB 都未选中。
预期行为:
- 我快速连续点击4个CB,它们都会被选中。 (真)
- 我快速连续单击 4 个标签,相应的 CB 变为选中状态。 (仅适用于 Chrome,但仍不是最佳选择)
Win 7 上案例 2 的实际行为(单击标签,因为如您所知,标签很大且可以设置样式,而复选框很小且依赖于操作系统):
- (在 Firefox 19 中)CB2 和 CB4 处于未选中状态,在列表中向下显示标签 2 和标签 4 的“标签”一词,就像我双击它们一样。
- (在 Chrome 26 中)所有 CB 都得到了正确检查,但在向下查看列表时,标签 2 和标签 4 的“标签”一词会突出显示,就像我双击它们一样。
- (在 IE 10 中)CB2 和 CB4 未选中,但没有错误突出显示。
如果点击是在同一个元素上,则错误行为可能是合理的。在我们的例子中,这些显然是具有不同 ID 和名称的唯一复选框。所以结果出乎意料。
所以我的问题是:
有没有办法在我快速单击不同的复选框时禁用双击事件,但仍然通过快速单击来检查它们?
我最接近的是以下脚本,有趣的是,它使 Firefox 的行为类似于 Chrome,而 Chrome 的行为类似于 Firefox:
jQuery(document).on('dblclick', 'input:checkbox+label', function(event){
console.log('ugly hack fired');
$(this).click();
event.preventDefault();
})
【问题讨论】:
标签: javascript jquery css forms